From 74b3007b7fbbeff2a4145e4207b1b295f24fa364 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 11:49:58 +0100 Subject: [PATCH 01/15] feat: immediately execute command --- src/engine.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index c08a27e5..bf67c870 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -642,12 +642,12 @@ impl Reedline { /// /// Returns a [`std::io::Result`] in which the `Err` type is [`std::io::Result`] /// and the `Ok` variant wraps a [`Signal`] which handles user inputs. - pub fn read_line(&mut self, prompt: &dyn Prompt) -> Result { + pub fn read_line(&mut self, prompt: &dyn Prompt, immediately_execute: bool) -> Result { terminal::enable_raw_mode()?; self.bracketed_paste.enter(); self.kitty_protocol.enter(); - let result = self.read_line_helper(prompt); + let result = self.read_line_helper(prompt, immediately_execute); self.bracketed_paste.exit(); self.kitty_protocol.exit(); @@ -687,7 +687,11 @@ impl Reedline { /// Helper implementing the logic for [`Reedline::read_line()`] to be wrapped /// in a `raw_mode` context. - fn read_line_helper(&mut self, prompt: &dyn Prompt) -> Result { + fn read_line_helper( + &mut self, + prompt: &dyn Prompt, + immediately_execute: bool, + ) -> Result { self.painter .initialize_prompt_position(self.suspended_state.as_ref())?; if self.suspended_state.is_some() { @@ -781,6 +785,9 @@ impl Reedline { } } } + if immediately_execute { + reedline_events.push(ReedlineEvent::Submit); + } if !edits.is_empty() { reedline_events.push(ReedlineEvent::Edit(edits)); } From a5c91cc03ea574a2c7349b507634ec363cb35b27 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 12:11:08 +0100 Subject: [PATCH 02/15] fix: compile examples --- examples/completions.rs | 2 +- examples/custom_prompt.rs | 2 +- examples/demo.rs | 2 +- examples/highlighter.rs | 2 +- examples/hinter.rs | 2 +- examples/history.rs | 2 +- examples/ide_completions.rs | 2 +- examples/transient_prompt.rs | 2 +- examples/validator.rs | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/completions.rs b/examples/completions.rs index 164b5c30..78752d4e 100644 --- a/examples/completions.rs +++ b/examples/completions.rs @@ -81,7 +81,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/custom_prompt.rs b/examples/custom_prompt.rs index fc9b1034..abc1656b 100644 --- a/examples/custom_prompt.rs +++ b/examples/custom_prompt.rs @@ -61,7 +61,7 @@ fn main() -> io::Result<()> { let prompt = CustomPrompt(Cell::new(0), "Custom Prompt"); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/demo.rs b/examples/demo.rs index 44e7b921..6fec5b1b 100644 --- a/examples/demo.rs +++ b/examples/demo.rs @@ -134,7 +134,7 @@ fn main() -> reedline::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt); + let sig = line_editor.read_line(&prompt, false); match sig { Ok(Signal::CtrlD) => { diff --git a/examples/highlighter.rs b/examples/highlighter.rs index 3edeb974..82616b7c 100644 --- a/examples/highlighter.rs +++ b/examples/highlighter.rs @@ -17,7 +17,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/hinter.rs b/examples/hinter.rs index 9ed4ba2d..7eebade8 100644 --- a/examples/hinter.rs +++ b/examples/hinter.rs @@ -17,7 +17,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/history.rs b/examples/history.rs index c709bce9..c9a6714f 100644 --- a/examples/history.rs +++ b/examples/history.rs @@ -19,7 +19,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/ide_completions.rs b/examples/ide_completions.rs index a209a167..dd8fcda6 100644 --- a/examples/ide_completions.rs +++ b/examples/ide_completions.rs @@ -117,7 +117,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/transient_prompt.rs b/examples/transient_prompt.rs index d3aaa390..cc44cf23 100644 --- a/examples/transient_prompt.rs +++ b/examples/transient_prompt.rs @@ -118,7 +118,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/validator.rs b/examples/validator.rs index 2e7ca4f9..6efbdb0b 100644 --- a/examples/validator.rs +++ b/examples/validator.rs @@ -27,7 +27,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); From effbcde3ef1c436bc42957859b332627a9927e37 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 13:49:49 +0100 Subject: [PATCH 03/15] dbg: println --- src/engine.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine.rs b/src/engine.rs index bf67c870..875dbb81 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -786,6 +786,7 @@ impl Reedline { } } if immediately_execute { + println!("Reedline: pushing submit!"); reedline_events.push(ReedlineEvent::Submit); } if !edits.is_empty() { From 1d9fdf6465722fbe4b6647af967fc96c1883cd32 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 13:54:39 +0100 Subject: [PATCH 04/15] dbg++ --- examples/basic.rs | 2 +- src/engine.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/basic.rs b/examples/basic.rs index 2c04b75b..f5dd46ee 100644 --- a/examples/basic.rs +++ b/examples/basic.rs @@ -12,7 +12,7 @@ fn main() -> io::Result<()> { let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/src/engine.rs b/src/engine.rs index 875dbb81..58bf2ef9 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -643,6 +643,7 @@ impl Reedline { /// Returns a [`std::io::Result`] in which the `Err` type is [`std::io::Result`] /// and the `Ok` variant wraps a [`Signal`] which handles user inputs. pub fn read_line(&mut self, prompt: &dyn Prompt, immediately_execute: bool) -> Result { + dbg!(immediately_execute); terminal::enable_raw_mode()?; self.bracketed_paste.enter(); self.kitty_protocol.enter(); @@ -692,6 +693,7 @@ impl Reedline { prompt: &dyn Prompt, immediately_execute: bool, ) -> Result { + dbg!(immediately_execute); self.painter .initialize_prompt_position(self.suspended_state.as_ref())?; if self.suspended_state.is_some() { From 5f38c62f7fb79fed4546a0712adb164dd2836357 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:10:23 +0100 Subject: [PATCH 05/15] dbg++ --- src/engine.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine.rs b/src/engine.rs index 58bf2ef9..075d9967 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -756,6 +756,7 @@ impl Reedline { events.push(crossterm::event::read()?); } + println!("Pre second read"); // If we believe there's text pasting or resizing going on, batch // more events at the cost of a slight delay. if events.len() > EVENTS_THRESHOLD @@ -765,6 +766,7 @@ impl Reedline { events.push(crossterm::event::read()?); } } + println!("Post second read"); // Convert `Event` into `ReedlineEvent`. Also, fuse consecutive // `ReedlineEvent::EditCommand` into one. Also, if there're multiple @@ -787,8 +789,8 @@ impl Reedline { } } } + println!("Checking and pushing Submit"); if immediately_execute { - println!("Reedline: pushing submit!"); reedline_events.push(ReedlineEvent::Submit); } if !edits.is_empty() { From 8afd397339442383ecd49326c212b67f361b93b3 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:12:03 +0100 Subject: [PATCH 06/15] fix: skip second read --- src/engine.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine.rs b/src/engine.rs index 075d9967..2201cca2 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -760,7 +760,7 @@ impl Reedline { // If we believe there's text pasting or resizing going on, batch // more events at the cost of a slight delay. if events.len() > EVENTS_THRESHOLD - || events.iter().any(|e| matches!(e, Event::Resize(_, _))) + || events.iter().any(|e| matches!(e, Event::Resize(_, _))) && !immediately_execute { while !completed(&events) && event::poll(POLL_WAIT)? { events.push(crossterm::event::read()?); From c6009b2806fd4a9b8d19f4763c13f02dfebc5d33 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:14:26 +0100 Subject: [PATCH 07/15] fix: edit and resize before submit --- src/engine.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index 2201cca2..2895b33c 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -756,7 +756,6 @@ impl Reedline { events.push(crossterm::event::read()?); } - println!("Pre second read"); // If we believe there's text pasting or resizing going on, batch // more events at the cost of a slight delay. if events.len() > EVENTS_THRESHOLD @@ -766,7 +765,6 @@ impl Reedline { events.push(crossterm::event::read()?); } } - println!("Post second read"); // Convert `Event` into `ReedlineEvent`. Also, fuse consecutive // `ReedlineEvent::EditCommand` into one. Also, if there're multiple @@ -789,16 +787,16 @@ impl Reedline { } } } - println!("Checking and pushing Submit"); - if immediately_execute { - reedline_events.push(ReedlineEvent::Submit); - } if !edits.is_empty() { reedline_events.push(ReedlineEvent::Edit(edits)); } if let Some((x, y)) = resize { reedline_events.push(ReedlineEvent::Resize(x, y)); } + println!("Checking and pushing Submit"); + if immediately_execute { + reedline_events.push(ReedlineEvent::Submit); + } // Handle reedline events. for event in reedline_events { From 2a3559dca3f4c695e5a0ceeb5a21cfcdb180675b Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:18:32 +0100 Subject: [PATCH 08/15] dbg++ --- src/engine.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index 2895b33c..7f8a2d2b 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -693,7 +693,6 @@ impl Reedline { prompt: &dyn Prompt, immediately_execute: bool, ) -> Result { - dbg!(immediately_execute); self.painter .initialize_prompt_position(self.suspended_state.as_ref())?; if self.suspended_state.is_some() { @@ -759,7 +758,7 @@ impl Reedline { // If we believe there's text pasting or resizing going on, batch // more events at the cost of a slight delay. if events.len() > EVENTS_THRESHOLD - || events.iter().any(|e| matches!(e, Event::Resize(_, _))) && !immediately_execute + || events.iter().any(|e| matches!(e, Event::Resize(_, _))) { while !completed(&events) && event::poll(POLL_WAIT)? { events.push(crossterm::event::read()?); @@ -795,6 +794,7 @@ impl Reedline { } println!("Checking and pushing Submit"); if immediately_execute { + dbg!(self.current_buffer_contents()); reedline_events.push(ReedlineEvent::Submit); } From 5d11ba98519bc9ceb0d30c1b986a140c32eb4cad Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:19:24 +0100 Subject: [PATCH 09/15] dbg++ --- src/engine.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine.rs b/src/engine.rs index 7f8a2d2b..cbb213cd 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -755,6 +755,7 @@ impl Reedline { events.push(crossterm::event::read()?); } + dbg!(self.current_buffer_contents()); // If we believe there's text pasting or resizing going on, batch // more events at the cost of a slight delay. if events.len() > EVENTS_THRESHOLD @@ -794,7 +795,6 @@ impl Reedline { } println!("Checking and pushing Submit"); if immediately_execute { - dbg!(self.current_buffer_contents()); reedline_events.push(ReedlineEvent::Submit); } From 25bb8509f2ca08323af8c88c6d5feba48ce94108 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:21:45 +0100 Subject: [PATCH 10/15] fix: only loop if not done --- src/engine.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index cbb213cd..92a119bc 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -755,14 +755,15 @@ impl Reedline { events.push(crossterm::event::read()?); } - dbg!(self.current_buffer_contents()); - // If we believe there's text pasting or resizing going on, batch - // more events at the cost of a slight delay. - if events.len() > EVENTS_THRESHOLD - || events.iter().any(|e| matches!(e, Event::Resize(_, _))) - { - while !completed(&events) && event::poll(POLL_WAIT)? { - events.push(crossterm::event::read()?); + if !immediately_execute { + // If we believe there's text pasting or resizing going on, batch + // more events at the cost of a slight delay. + if events.len() > EVENTS_THRESHOLD + || events.iter().any(|e| matches!(e, Event::Resize(_, _))) + { + while !completed(&events) && event::poll(POLL_WAIT)? { + events.push(crossterm::event::read()?); + } } } From 3511259bb1caa42b0fb27d8cd349d6bc48fbd400 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:22:59 +0100 Subject: [PATCH 11/15] dbg++ --- src/engine.rs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index 92a119bc..b93bf262 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -739,23 +739,24 @@ impl Reedline { let mut events: Vec = vec![]; - // If the `external_printer` feature is enabled, we need to - // periodically yield so that external printers get a chance to - // print. Otherwise, we can just block until we receive an event. - #[cfg(feature = "external_printer")] - if event::poll(EXTERNAL_PRINTER_WAIT)? { + dbg!(self.current_buffer_contents()); + if !immediately_execute { + // If the `external_printer` feature is enabled, we need to + // periodically yield so that external printers get a chance to + // print. Otherwise, we can just block until we receive an event. + #[cfg(feature = "external_printer")] + if event::poll(EXTERNAL_PRINTER_WAIT)? { + events.push(crossterm::event::read()?); + } + #[cfg(not(feature = "external_printer"))] events.push(crossterm::event::read()?); - } - #[cfg(not(feature = "external_printer"))] - events.push(crossterm::event::read()?); - // Receive all events in the queue without blocking. Will stop when - // a line of input is completed. - while !completed(&events) && event::poll(Duration::from_millis(0))? { - events.push(crossterm::event::read()?); - } + // a line of input is completed. + // Receive all events in the queue without blocking. Will stop when + while !completed(&events) && event::poll(Duration::from_millis(0))? { + events.push(crossterm::event::read()?); + } - if !immediately_execute { // If we believe there's text pasting or resizing going on, batch // more events at the cost of a slight delay. if events.len() > EVENTS_THRESHOLD From 3a6ad518a00f9482c509e284c07df90d6fd41e0d Mon Sep 17 00:00:00 2001 From: mrdgo Date: Tue, 11 Feb 2025 14:24:09 +0100 Subject: [PATCH 12/15] dbg-- --- src/engine.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index b93bf262..6be26472 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -643,7 +643,6 @@ impl Reedline { /// Returns a [`std::io::Result`] in which the `Err` type is [`std::io::Result`] /// and the `Ok` variant wraps a [`Signal`] which handles user inputs. pub fn read_line(&mut self, prompt: &dyn Prompt, immediately_execute: bool) -> Result { - dbg!(immediately_execute); terminal::enable_raw_mode()?; self.bracketed_paste.enter(); self.kitty_protocol.enter(); @@ -739,7 +738,6 @@ impl Reedline { let mut events: Vec = vec![]; - dbg!(self.current_buffer_contents()); if !immediately_execute { // If the `external_printer` feature is enabled, we need to // periodically yield so that external printers get a chance to @@ -795,7 +793,6 @@ impl Reedline { if let Some((x, y)) = resize { reedline_events.push(ReedlineEvent::Resize(x, y)); } - println!("Checking and pushing Submit"); if immediately_execute { reedline_events.push(ReedlineEvent::Submit); } From 397c754dda9d7cc3bf250b23902d458e5cbd5ec8 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Mon, 17 Feb 2025 08:30:28 +0100 Subject: [PATCH 13/15] clippy-fix --- src/core_editor/line_buffer.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core_editor/line_buffer.rs b/src/core_editor/line_buffer.rs index e5c34968..07eaa035 100644 --- a/src/core_editor/line_buffer.rs +++ b/src/core_editor/line_buffer.rs @@ -163,7 +163,7 @@ impl LineBuffer { pub fn grapheme_left_index(&self) -> usize { self.lines[..self.insertion_point] .grapheme_indices(true) - .last() + .next_back() .map(|(i, _)| i) .unwrap_or(0) } @@ -213,7 +213,7 @@ impl LineBuffer { .unwrap_or_else(|| { self.lines .grapheme_indices(true) - .last() + .next_back() .map(|x| x.0) .unwrap_or(0) }) @@ -238,7 +238,7 @@ impl LineBuffer { .unwrap_or_else(|| { self.lines .grapheme_indices(true) - .last() + .next_back() .map(|x| x.0) .unwrap_or(0) }) @@ -272,7 +272,7 @@ impl LineBuffer { self.lines[..self.insertion_point] .split_word_bound_indices() .filter(|(_, word)| !is_whitespace_str(word)) - .last() + .next_back() .map(|(i, _)| i) .unwrap_or(0) } @@ -471,7 +471,7 @@ impl LineBuffer { let left_index = self.lines[..right_index] .split_word_bound_indices() .filter(|(_, word)| !is_whitespace_str(word)) - .last() + .next_back() .map(|(i, _)| i) .unwrap_or(0); From 6750fc43e9da05c894315e45d90a2db4324e9de4 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Mon, 17 Feb 2025 08:31:47 +0100 Subject: [PATCH 14/15] fix cargo-test --- src/engine.rs | 2 +- src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index 6be26472..a9cc2f68 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -88,7 +88,7 @@ enum InputMode { /// let mut line_editor = Reedline::create(); /// let prompt = DefaultPrompt::default(); /// -/// let out = line_editor.read_line(&prompt).unwrap(); +/// let out = line_editor.read_line(&prompt, false).unwrap(); /// match out { /// Signal::Success(content) => { /// // process content diff --git a/src/lib.rs b/src/lib.rs index 35eccceb..45735f63 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,7 +19,7 @@ //! let prompt = DefaultPrompt::default(); //! //! loop { -//! let sig = line_editor.read_line(&prompt); +//! let sig = line_editor.read_line(&prompt, false); //! match sig { //! Ok(Signal::Success(buffer)) => { //! println!("We processed: {}", buffer); From bdb2976bcab2f57cc96ac7097059b92f8bbbcb33 Mon Sep 17 00:00:00 2001 From: mrdgo Date: Wed, 19 Feb 2025 08:09:39 +0100 Subject: [PATCH 15/15] fix: add flag to remaining calls to read_line --- README.md | 2 +- examples/cwd_aware_hinter.rs | 2 +- examples/external_printer.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f60f3204..0101763d 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ let mut line_editor = Reedline::create(); let prompt = DefaultPrompt::default(); loop { - let sig = line_editor.read_line(&prompt); + let sig = line_editor.read_line(&prompt, false); match sig { Ok(Signal::Success(buffer)) => { println!("We processed: {}", buffer); diff --git a/examples/cwd_aware_hinter.rs b/examples/cwd_aware_hinter.rs index b8b9145d..4044b6c0 100644 --- a/examples/cwd_aware_hinter.rs +++ b/examples/cwd_aware_hinter.rs @@ -71,7 +71,7 @@ fn main() -> io::Result<()> { } else { std::env::set_current_dir(&home_dir).unwrap(); } - let sig = line_editor.read_line(&prompt)?; + let sig = line_editor.read_line(&prompt, false)?; match sig { Signal::Success(buffer) => { println!("We processed: {buffer}"); diff --git a/examples/external_printer.rs b/examples/external_printer.rs index 633a1238..22f636ca 100644 --- a/examples/external_printer.rs +++ b/examples/external_printer.rs @@ -42,7 +42,7 @@ fn main() { let prompt = DefaultPrompt::default(); loop { - if let Ok(sig) = line_editor.read_line(&prompt) { + if let Ok(sig) = line_editor.read_line(&prompt, false) { match sig { Signal::Success(buffer) => { println!("We processed: {buffer}");