Add optional mouse handler

Mouse actions will be enabled on devices that support it.
Because sometimes, scrolling with mouse is the laziest way to navigate.
pull/167/head
Arijit Basu 3 years ago committed by Arijit Basu
parent d96e620120
commit 5c179a9b70

@ -1,7 +1,7 @@
use crate::app::Task;
use crate::app::{ExternalMsg, InternalMsg, MsgIn};
use crate::input::Key;
use crossterm::event::{self, Event};
use crossterm::event::{self, Event, MouseEvent};
use std::sync::mpsc::{Receiver, Sender};
use std::thread;
@ -19,6 +19,16 @@ pub fn keep_reading(tx_msg_in: Sender<Task>, rx_event_reader: Receiver<bool>) {
// NOTE: The poll timeout need to stay low, else spawning sub subshell
// and start typing immediately will cause panic.
match event::read() {
Ok(Event::Mouse(MouseEvent::ScrollUp(_, _, _))) => {
let msg = MsgIn::External(ExternalMsg::FocusPrevious);
tx_msg_in.send(Task::new(msg, None)).unwrap_or_default();
}
Ok(Event::Mouse(MouseEvent::ScrollDown(_, _, _))) => {
let msg = MsgIn::External(ExternalMsg::FocusNext);
tx_msg_in.send(Task::new(msg, None)).unwrap_or_default();
}
Ok(Event::Key(key)) => {
let key = Key::from_event(key);
let msg = MsgIn::Internal(InternalMsg::HandleKey(key));
@ -31,7 +41,9 @@ pub fn keep_reading(tx_msg_in: Sender<Task>, rx_event_reader: Receiver<bool>) {
let msg = MsgIn::External(ExternalMsg::Refresh);
tx_msg_in.send(Task::new(msg, None)).unwrap_or_default();
}
Ok(_) => {}
Err(e) => {
tx_msg_in
.send(Task::new(

@ -8,6 +8,7 @@ use crate::pipe_reader;
use crate::pwd_watcher;
use crate::ui;
use anyhow::Result;
use crossterm::event;
use crossterm::execute;
use crossterm::terminal as term;
use std::fs;
@ -85,7 +86,7 @@ pub fn run(
let mut stdout = get_tty()?;
// let mut stdout = stdout.lock();
execute!(stdout, term::EnterAlternateScreen)?;
// let stdout = MouseTerminal::from(stdout);
execute!(stdout, event::EnableMouseCapture).unwrap_or_default(); // Optional
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
terminal.hide_cursor()?;
@ -198,6 +199,9 @@ pub fn run(
}
app::MsgOut::Call(cmd) => {
execute!(terminal.backend_mut(), event::DisableMouseCapture)
.unwrap_or_default(); // Optional
tx_event_reader.send(true)?;
terminal.clear()?;
@ -224,6 +228,9 @@ pub fn run(
term::enable_raw_mode()?;
terminal.hide_cursor()?;
tx_event_reader.send(false)?;
execute!(terminal.backend_mut(), event::EnableMouseCapture)
.unwrap_or_default(); // Optional
}
};
}
@ -239,6 +246,7 @@ pub fn run(
terminal.clear()?;
terminal.set_cursor(0, 0)?;
execute!(terminal.backend_mut(), term::LeaveAlternateScreen)?;
execute!(terminal.backend_mut(), event::DisableMouseCapture).unwrap_or_default(); // Optional
term::disable_raw_mode()?;
terminal.show_cursor()?;

Loading…
Cancel
Save