From 337a60cef554cbe5c4823c217ad65f4696a87d52 Mon Sep 17 00:00:00 2001 From: Patrick Auernig Date: Mon, 14 Aug 2023 19:32:06 +0200 Subject: [PATCH] Handle paste for file select --- crates/wayfarer/src/tui.rs | 14 +++++++++++--- crates/wayfarer/src/tui/events.rs | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/crates/wayfarer/src/tui.rs b/crates/wayfarer/src/tui.rs index 5f5f689..5ba79e1 100644 --- a/crates/wayfarer/src/tui.rs +++ b/crates/wayfarer/src/tui.rs @@ -10,7 +10,9 @@ use std::sync::mpsc::{self, TryRecvError}; use anyhow::Result; use clap::Parser as ArgParser; -use crossterm::event::{DisableMouseCapture, EnableMouseCapture}; +use crossterm::event::{ + DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture, +}; use crossterm::execute; use crossterm::terminal::{ disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen, @@ -155,7 +157,12 @@ fn setup() -> Result { debug!("Enabling terminal raw mode"); enable_raw_mode()?; - execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; + execute!( + stdout, + EnterAlternateScreen, + EnableMouseCapture, + EnableBracketedPaste + )?; Ok(Terminal::new(CrosstermBackend::new(stdout))?) } @@ -168,7 +175,8 @@ fn reset(mut terminal: Terminal) -> Result<()> { execute!( terminal.backend_mut(), LeaveAlternateScreen, - DisableMouseCapture + DisableMouseCapture, + DisableBracketedPaste )?; terminal.show_cursor()?; diff --git a/crates/wayfarer/src/tui/events.rs b/crates/wayfarer/src/tui/events.rs index 22d9b60..4466699 100644 --- a/crates/wayfarer/src/tui/events.rs +++ b/crates/wayfarer/src/tui/events.rs @@ -3,7 +3,9 @@ use std::time::Duration; use anyhow::Result; use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers}; +use tracing::debug; use tui_input::backend::crossterm::EventHandler; +use tui_input::Input; use super::{Message, Mode, State}; @@ -15,6 +17,7 @@ pub fn handle(event_queue: &mut mpsc::Sender, state: &mut State) -> Res match event::read()? { Event::Key(key) => handle_keyboard_input(key, event_queue, state)?, + Event::Paste(val) => handle_paste(val, state)?, _ => return Ok(()), } @@ -22,6 +25,19 @@ pub fn handle(event_queue: &mut mpsc::Sender, state: &mut State) -> Res } +fn handle_paste(value: String, state: &mut State) -> Result<()> { + match &state.mode { + Mode::SelectFile => { + debug!("Received pasted content: {:?}", value); + let combined = format!("{}{}", state.file_select.value(), value); + state.file_select = Input::new(combined); + } + _ => (), + } + Ok(()) +} + + #[tracing::instrument(skip(msg_tx, state))] fn handle_keyboard_input( key: KeyEvent,