aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYummyOreo <bobgim20@gmail.com>2023-09-11 02:49:06 -0500
committerGitHub <noreply@github.com>2023-09-11 08:49:06 +0100
commit34654adececfd366e8a6a9bdd808cc336f3c8af7 (patch)
treef57b984843f51f76ee5ad00fa230aa5cbca7414e
parentUpdate docker.md (diff)
downloadatuin-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.rs24
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)? {