diff options
| author | YummyOreo <bobgim20@gmail.com> | 2023-09-11 02:49:06 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-11 08:49:06 +0100 |
| commit | 34654adececfd366e8a6a9bdd808cc336f3c8af7 (patch) | |
| tree | f57b984843f51f76ee5ad00fa230aa5cbca7414e | |
| parent | Update docker.md (diff) | |
| download | atuin-34654adececfd366e8a6a9bdd808cc336f3c8af7.zip | |
feat: mouse selection support (#1209)
* feat: mouse selection support
* refactor: don't import self
Diffstat (limited to '')
| -rw-r--r-- | atuin/src/command/client/search/interactive.rs | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/atuin/src/command/client/search/interactive.rs b/atuin/src/command/client/search/interactive.rs index 79399abf..8c12b1fb 100644 --- a/atuin/src/command/client/search/interactive.rs +++ b/atuin/src/command/client/search/interactive.rs @@ -4,7 +4,10 @@ use std::{ }; use crossterm::{ - event::{self, Event, KeyCode, KeyEvent, KeyModifiers, MouseEvent}, + event::{ + self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEvent, KeyModifiers, + MouseEvent, + }, execute, terminal, }; use eyre::Result; @@ -63,13 +66,24 @@ impl State { Ok(results) } - fn handle_input(&mut self, settings: &Settings, input: &Event) -> Option<usize> { - match input { + fn handle_input<W>( + &mut self, + settings: &Settings, + input: &Event, + w: &mut W, + ) -> Result<Option<usize>> + where + W: Write, + { + execute!(w, EnableMouseCapture)?; + let r = match input { Event::Key(k) => self.handle_key_input(settings, k), Event::Mouse(m) => self.handle_mouse_input(*m), Event::Paste(d) => self.handle_paste_input(d), _ => None, - } + }; + execute!(w, DisableMouseCapture)?; + Ok(r) } fn handle_mouse_input(&mut self, input: MouseEvent) -> Option<usize> { @@ -639,7 +653,7 @@ pub async fn history( event_ready = event_ready => { if event_ready?? { loop { - if let Some(i) = app.handle_input(settings, &event::read()?) { + if let Some(i) = app.handle_input(settings, &event::read()?, &mut std::io::stdout())? { break 'render i; } if !event::poll(Duration::ZERO)? { |
