From 828470137cb4e806c31a26fa741d5d67c64f98c2 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 28 Oct 2026 22:31:18 +0100 Subject: v0.2.4: fix command UX, completion wrapping and auth prompt cancellation --- src/client/core.rs | 7 +++---- src/client/ui.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) (limited to 'src/client') diff --git a/src/client/core.rs b/src/client/core.rs index 0e54fba..a910a68 100644 --- a/src/client/core.rs +++ b/src/client/core.rs @@ -1,7 +1,8 @@ use crate::client::games::manager::GameManager; use crate::client::games::response::parse_spin_response; use crate::client::ui::{ - command_names, help_lines, input_cursor_column, parse_bet_arg, record_history, + command_names, completion_lines, help_lines, input_cursor_column, parse_bet_arg, + record_history, }; #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -439,9 +440,7 @@ impl ClientCore { if matches.len() == 1 { self.input = matches[0].to_string(); } else if matches.len() > 1 { - let mut lines = vec!["Possible completions:".to_string()]; - lines.push(matches.join(" ")); - effects.push(Effect::Print(lines)); + effects.push(Effect::Print(completion_lines(&matches, 76))); } if let Some(prompt) = self.prompt_effect() { effects.push(prompt); diff --git a/src/client/ui.rs b/src/client/ui.rs index 036c36a..6fc2f62 100644 --- a/src/client/ui.rs +++ b/src/client/ui.rs @@ -102,6 +102,33 @@ pub fn help_lines() -> Vec { lines } +/// Wrap a completion list to `width` columns, one space between names. +pub fn completion_lines(commands: &[&str], width: usize) -> Vec { + let mut lines = vec!["Possible completions:".to_string()]; + let mut current = String::new(); + + for command in commands { + let needed = if current.is_empty() { + command.len() + } else { + current.len() + 1 + command.len() + }; + if !current.is_empty() && needed > width { + lines.push(current.clone()); + current.clear(); + } + if !current.is_empty() { + current.push(' '); + } + current.push_str(command); + } + + if !current.is_empty() { + lines.push(current); + } + lines +} + /// Add a command to the history, skipping blanks and consecutive duplicates. pub fn record_history(history: &mut Vec, line: &str) { let line = line.trim(); -- cgit v1.2.3