chiark / gitweb /
Ability to abort a bottom-line prompt.
authorSimon Tatham <anakin@pobox.com>
Mon, 1 Jan 2024 09:18:23 +0000 (09:18 +0000)
committerSimon Tatham <anakin@pobox.com>
Mon, 1 Jan 2024 10:10:14 +0000 (10:10 +0000)
The new PopOverlay logical action returns to the previous non-overlay
activity, without reinitialising it.

src/activity_stack.rs
src/editor.rs
src/tui.rs

index fd22dcdd13860c98dad132fc7d4d898b27a7a0d5..0d9b724a73f299e3626e09f281c60a22383bfb6f 100644 (file)
@@ -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
index 5d3c5e67ba5f0a387f3e82a0dc71a64a8efe4dc9..fbb7ae5c4d77fbf9be3af312f67de244206e464d 100644 (file)
@@ -577,7 +577,13 @@ impl ActivityState for BottomLineEditorOverlay {
 pub fn get_user_to_examine() -> Box<dyn ActivityState> {
     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())
+            }
+        })
     ))
 }
index b69e5ba61a95b4896365f63f38ac49ab8b14fc35..eae9a5c66bdcd3469a66842b2643658fe35b40e2 100644 (file)
@@ -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;
+    }
 }