Handle paste for file select
This commit is contained in:
parent
6f0ab738f0
commit
337a60cef5
@ -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()?;
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user