From 81d695da71b218d2ed410ea2b3288e8ff598b3a7 Mon Sep 17 00:00:00 2001 From: oto <13265059+otomist@users.noreply.github.com> Date: Mon, 1 Dec 2025 11:54:42 -0500 Subject: [PATCH 1/3] cursor in password field using set_cursor_position --- src/mode/station/auth/psk.rs | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/mode/station/auth/psk.rs b/src/mode/station/auth/psk.rs index 3babf5e..c771ffb 100644 --- a/src/mode/station/auth/psk.rs +++ b/src/mode/station/auth/psk.rs @@ -113,14 +113,16 @@ impl Psk { .alignment(Alignment::Center) .style(Style::default().fg(Color::White)) .block(Block::new().padding(Padding::uniform(1))); + + let passphrase_str = if self.show_password { + self.passphrase.value().to_string() + } else { + "*".repeat(self.passphrase.value().len()) + }; - let passkey = Paragraph::new({ - if self.show_password { - self.passphrase.value().to_string() - } else { - "*".repeat(self.passphrase.value().len()) - } - }) + let pass_len = passphrase_str.len(); + + let passkey = Paragraph::new(passphrase_str) .alignment(Alignment::Center) .style(Style::default().fg(Color::White)) .block(Block::new().style(Style::default().bg(Color::DarkGray))); @@ -143,6 +145,24 @@ impl Psk { ); frame.render_widget(text, text_area); frame.render_widget(passkey, passkey_area); + + let inner_width = passkey_area.width.saturating_sub(2) as usize; + let pad_left = if inner_width > pass_len { + (inner_width - pass_len) / 2 + } else { + 0 + }; + + let visual_cursor = self + .passphrase + .visual_cursor() + .min(pass_len); + + let x_in_inner = pad_left + visual_cursor; + + let cursor_x = passkey_area.x + 1 + x_in_inner as u16; + frame.set_cursor_position((cursor_x, passkey_area.y)); + frame.render_widget(show_password_icon, show_password_area); } } From 090a6175d4b3af5e78829315c1cb39b6eba1bda3 Mon Sep 17 00:00:00 2001 From: oto <13265059+otomist@users.noreply.github.com> Date: Mon, 1 Dec 2025 13:54:13 -0500 Subject: [PATCH 2/3] increase password field width --- src/mode/station/auth/psk.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mode/station/auth/psk.rs b/src/mode/station/auth/psk.rs index c771ffb..62b18b1 100644 --- a/src/mode/station/auth/psk.rs +++ b/src/mode/station/auth/psk.rs @@ -89,10 +89,10 @@ impl Psk { let area2 = Layout::default() .direction(Direction::Horizontal) .constraints([ - Constraint::Percentage(20), + Constraint::Length(2), Constraint::Fill(1), Constraint::Length(5), - Constraint::Percentage(20), + Constraint::Length(2), ]) .flex(ratatui::layout::Flex::Center) .split(chunks[2]); From 6e566e403dd05cb02eb125746603e8b92e7a9a8a Mon Sep 17 00:00:00 2001 From: oto <13265059+otomist@users.noreply.github.com> Date: Mon, 1 Dec 2025 14:25:55 -0500 Subject: [PATCH 3/3] use safer subtraction (saturatng_sub) and format --- src/mode/station/auth/psk.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/mode/station/auth/psk.rs b/src/mode/station/auth/psk.rs index 62b18b1..20cfad8 100644 --- a/src/mode/station/auth/psk.rs +++ b/src/mode/station/auth/psk.rs @@ -113,7 +113,7 @@ impl Psk { .alignment(Alignment::Center) .style(Style::default().fg(Color::White)) .block(Block::new().padding(Padding::uniform(1))); - + let passphrase_str = if self.show_password { self.passphrase.value().to_string() } else { @@ -121,11 +121,11 @@ impl Psk { }; let pass_len = passphrase_str.len(); - + let passkey = Paragraph::new(passphrase_str) - .alignment(Alignment::Center) - .style(Style::default().fg(Color::White)) - .block(Block::new().style(Style::default().bg(Color::DarkGray))); + .alignment(Alignment::Center) + .style(Style::default().fg(Color::White)) + .block(Block::new().style(Style::default().bg(Color::DarkGray))); let show_password_icon = if self.show_password { Text::from("󰈈 ").centered() @@ -148,15 +148,12 @@ impl Psk { let inner_width = passkey_area.width.saturating_sub(2) as usize; let pad_left = if inner_width > pass_len { - (inner_width - pass_len) / 2 + inner_width.saturating_sub(pass_len) / 2 } else { 0 }; - let visual_cursor = self - .passphrase - .visual_cursor() - .min(pass_len); + let visual_cursor = self.passphrase.visual_cursor().min(pass_len); let x_in_inner = pad_left + visual_cursor;