From c3a4dffff03df4ca7d22a02f308b52ee56831c44 Mon Sep 17 00:00:00 2001 From: Victoria Fischer Date: Tue, 30 Jun 2026 09:07:22 +0200 Subject: [PATCH] ui: store the last selected spoken text when not focused --- src/ui.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui.rs b/src/ui.rs index e1cbae9..8977a63 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -31,6 +31,7 @@ pub struct Ui { tts: TtsControl, predictions: SessionControl, conversation: Vec, + last_spoken_idx: Option, sfx: SfxControl } @@ -60,6 +61,7 @@ impl Ui { last_tick: Instant::now(), conversation: vec![], reply_options: Default::default(), + last_spoken_idx: None, sfx } } @@ -212,6 +214,7 @@ impl Ui { match key.code { KeyCode::Tab => { self.focus_state = FocusState::UserInput; + self.last_spoken_idx = self.conversation_state.selected(); self.conversation_state.select(None); self.reply_state.select_first(); }, @@ -227,6 +230,7 @@ impl Ui { self.tts.speak(text.clone()).await.unwrap(); self.sfx.play_ambient().await.unwrap(); self.focus_state = FocusState::UserInput; + self.last_spoken_idx = self.conversation_state.selected(); self.conversation_state.select(None); self.reply_state.select_first(); } @@ -238,7 +242,7 @@ impl Ui { match key.code { KeyCode::Tab => { self.focus_state = FocusState::Conversation; - self.conversation_state.select_first(); + self.conversation_state.select(self.last_spoken_idx); self.reply_state.select(None); }, KeyCode::Char('r') if key.modifiers.contains(KeyModifiers::CONTROL) => self.predictions.regenerate_options().await,