Handle paste for file select

This commit is contained in:
Patrick Auernig 2023-08-14 19:32:06 +02:00
parent 6f0ab738f0
commit 337a60cef5
2 changed files with 27 additions and 3 deletions

View File

@ -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<Terminal> {
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()?;

View File

@ -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<Message>, 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<Message>, 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,