From: Simon Tatham Date: Mon, 1 Jan 2024 09:18:23 +0000 (+0000) Subject: Ability to abort a bottom-line prompt. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=997996bebcf5783e51726e02fddb89dbf2ce0a98;p=mastodonochrome.git Ability to abort a bottom-line prompt. The new PopOverlay logical action returns to the previous non-overlay activity, without reinitialising it. --- diff --git a/src/activity_stack.rs b/src/activity_stack.rs index fd22dcd..0d9b724 100644 --- a/src/activity_stack.rs +++ b/src/activity_stack.rs @@ -81,6 +81,10 @@ impl ActivityStack { } } + pub fn pop_overlay(&mut self) { + self.overlay = None; + } + pub fn new_event(&mut self) { // Save the utility activity we were in at the start of an // event. That way we can restore it when moving to an diff --git a/src/editor.rs b/src/editor.rs index 5d3c5e6..fbb7ae5 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -577,7 +577,13 @@ impl ActivityState for BottomLineEditorOverlay { pub fn get_user_to_examine() -> Box { Box::new(BottomLineEditorOverlay::new( ColouredString::plain("Examine User: "), - Box::new(move |s| LogicalAction::Goto( - UtilityActivity::ExamineUser(s.to_owned()).into())) + Box::new(move |s| { + if s.is_empty() { + LogicalAction::PopOverlaySilent + } else { + LogicalAction::Goto( + UtilityActivity::ExamineUser(s.to_owned()).into()) + } + }) )) } diff --git a/src/tui.rs b/src/tui.rs index b69e5ba..eae9a5c 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -391,6 +391,8 @@ pub enum CursorPosition { pub enum LogicalAction { Beep, Pop, + PopOverlaySilent, + PopOverlayBeep, Goto(Activity), Exit, Nothing, @@ -556,6 +558,14 @@ impl TuiLogicalState { self.changed_activity(client); PhysicalAction::Nothing }, + LogicalAction::PopOverlaySilent => { + self.pop_overlay_activity(); + PhysicalAction::Nothing + }, + LogicalAction::PopOverlayBeep => { + self.pop_overlay_activity(); + PhysicalAction::Beep + }, LogicalAction::Error(_) => PhysicalAction::Beep, // FIXME: Error Log } } @@ -592,4 +602,9 @@ impl TuiLogicalState { } } } + + fn pop_overlay_activity(&mut self) { + self.activity_stack.pop_overlay(); + self.overlay_activity_state = None; + } }