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 anyhow::Result;
|
||||||
use clap::Parser as ArgParser;
|
use clap::Parser as ArgParser;
|
||||||
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
use crossterm::event::{
|
||||||
|
DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture,
|
||||||
|
};
|
||||||
use crossterm::execute;
|
use crossterm::execute;
|
||||||
use crossterm::terminal::{
|
use crossterm::terminal::{
|
||||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||||
@ -155,7 +157,12 @@ fn setup() -> Result<Terminal> {
|
|||||||
debug!("Enabling terminal raw mode");
|
debug!("Enabling terminal raw mode");
|
||||||
enable_raw_mode()?;
|
enable_raw_mode()?;
|
||||||
|
|
||||||
execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
|
execute!(
|
||||||
|
stdout,
|
||||||
|
EnterAlternateScreen,
|
||||||
|
EnableMouseCapture,
|
||||||
|
EnableBracketedPaste
|
||||||
|
)?;
|
||||||
|
|
||||||
Ok(Terminal::new(CrosstermBackend::new(stdout))?)
|
Ok(Terminal::new(CrosstermBackend::new(stdout))?)
|
||||||
}
|
}
|
||||||
@ -168,7 +175,8 @@ fn reset(mut terminal: Terminal) -> Result<()> {
|
|||||||
execute!(
|
execute!(
|
||||||
terminal.backend_mut(),
|
terminal.backend_mut(),
|
||||||
LeaveAlternateScreen,
|
LeaveAlternateScreen,
|
||||||
DisableMouseCapture
|
DisableMouseCapture,
|
||||||
|
DisableBracketedPaste
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
terminal.show_cursor()?;
|
terminal.show_cursor()?;
|
||||||
|
@ -3,7 +3,9 @@ use std::time::Duration;
|
|||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
|
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
|
||||||
|
use tracing::debug;
|
||||||
use tui_input::backend::crossterm::EventHandler;
|
use tui_input::backend::crossterm::EventHandler;
|
||||||
|
use tui_input::Input;
|
||||||
|
|
||||||
use super::{Message, Mode, State};
|
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()? {
|
match event::read()? {
|
||||||
Event::Key(key) => handle_keyboard_input(key, event_queue, state)?,
|
Event::Key(key) => handle_keyboard_input(key, event_queue, state)?,
|
||||||
|
Event::Paste(val) => handle_paste(val, state)?,
|
||||||
_ => return Ok(()),
|
_ => 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))]
|
#[tracing::instrument(skip(msg_tx, state))]
|
||||||
fn handle_keyboard_input(
|
fn handle_keyboard_input(
|
||||||
key: KeyEvent,
|
key: KeyEvent,
|
||||||
|
Loading…
Reference in New Issue
Block a user