Allow pasting

This commit is contained in:
Austen Adler 2022-12-17 00:06:08 -05:00
parent a3027a3d6d
commit 9b88539c50
2 changed files with 29 additions and 6 deletions

View File

@ -7,7 +7,7 @@ edition = "2021"
[dependencies]
tui = "0.19"
crossterm = "0.25"
crossterm = { version = "0.25", features = ["bracketed-paste"] }
atty = "0.2.14"
ansi4tui = {path = "./ansi4tui/"}
anyhow = "1.0.66"

View File

@ -7,6 +7,8 @@ use ansi4tui::bytes_to_text;
use anyhow::bail;
use anyhow::Result;
use command::CommandResult;
use crossterm::event::DisableBracketedPaste;
use crossterm::event::EnableBracketedPaste;
use std::{
io::{self, Write},
process::{Command, Stdio},
@ -170,7 +172,12 @@ fn main() -> Result<()> {
enable_raw_mode()?;
let mut stdout = io::stdout();
// execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
execute!(stdout, EnterAlternateScreen)?;
execute!(
stdout,
EnterAlternateScreen,
// EnableMouseCapture,
EnableBracketedPaste,
)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
@ -186,7 +193,8 @@ fn main() -> Result<()> {
execute!(
terminal.backend_mut(),
LeaveAlternateScreen,
DisableMouseCapture
// DisableMouseCapture,
DisableBracketedPaste,
)?;
terminal.show_cursor()?;
@ -216,8 +224,8 @@ fn run_app<B: Backend>(
loop {
terminal.draw(|f| ui(f, &app))?;
if let Event::Key(key) = event::read()? {
match key.code {
match event::read()? {
Event::Key(key) => match key.code {
KeyCode::Esc => {
// TODO: If there is any command line text, ask if the user is sure they want to quit
return Ok(None);
@ -270,7 +278,17 @@ fn run_app<B: Backend>(
);
}
_ => {}
},
Event::Paste(data) => {
app.cmdline.insert_str(app.cmdline_position as usize, &data);
app.cmdline_position = app.cmdline_position.saturating_add(data.len() as u16);
if app.autorun {
command::run(&mut app);
}
}
Event::FocusGained | Event::FocusLost | Event::Mouse(_) | Event::Resize(_, _) => {}
}
}
}
@ -295,8 +313,13 @@ fn ui<B: Backend>(f: &mut Frame<B>, app: &App) {
Paragraph::new(app.cmdline.as_ref()).block(
Block::default()
.title(format!(
"Cmdline ({} {})",
"Cmdline ({}{}{})",
app.command,
if app.hidden_options.is_empty() {
""
} else {
" "
},
app.hidden_options.join(" ")
))
.borders(Borders::ALL),