diff --git a/src/engine.rs b/src/engine.rs index 5297a74d..4995dc73 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -880,7 +880,8 @@ impl Reedline { ReedlineEvent::Enter | ReedlineEvent::HistoryHintComplete | ReedlineEvent::Submit - | ReedlineEvent::SubmitOrNewline => { + | ReedlineEvent::SubmitOrNewline + | ReedlineEvent::SubmitOrSpace => { if let Some(string) = self.history_cursor.string_at_cursor() { self.editor .set_buffer(string, UndoBehavior::CreateUndoPoint); @@ -1170,6 +1171,20 @@ impl Reedline { } } } + ReedlineEvent::SubmitOrSpace => { + #[cfg(feature = "bashisms")] + if let Some(event) = self.parse_bang_command() { + return self.handle_editor_event(prompt, event); + } + for menu in self.menus.iter_mut() { + if menu.is_active() { + menu.replace_in_buffer(&mut self.editor); + menu.menu_event(MenuEvent::Deactivate); + } + } + self.run_edit_commands(&[EditCommand::InsertChar(' ')]); + Ok(EventStatus::Handled) + } ReedlineEvent::ExecuteHostCommand(host_command) => { self.suspended_state = Some(self.painter.state_before_suspension()); Ok(EventStatus::Exits(Signal::Success(host_command))) diff --git a/src/enums.rs b/src/enums.rs index 3f1d9181..715595bd 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -755,6 +755,9 @@ pub enum ReedlineEvent { /// Submit at the end of the *complete* text, otherwise newline SubmitOrNewline, + /// Submit at the end of the *complete* text, otherwise space + SubmitOrSpace, + /// Esc event Esc, @@ -848,6 +851,7 @@ impl Display for ReedlineEvent { ReedlineEvent::Enter => write!(f, "Enter"), ReedlineEvent::Submit => write!(f, "Submit"), ReedlineEvent::SubmitOrNewline => write!(f, "SubmitOrNewline"), + ReedlineEvent::SubmitOrSpace => write!(f, "SubmitOrSpace"), ReedlineEvent::Esc => write!(f, "Esc"), ReedlineEvent::Mouse => write!(f, "Mouse"), ReedlineEvent::Resize(_, _) => write!(f, "Resize "),