Add bracketed paste mode support for handling pasted text as verbatim input

This commit is contained in:
2026-03-05 20:04:20 -05:00
parent cac7140c8b
commit e31e27f935
7 changed files with 95 additions and 24 deletions

View File

@@ -32,6 +32,7 @@ use crate::libsh::sys::TTY_FILENO;
use crate::libsh::utils::AutoCmdVecUtils;
use crate::parse::execute::exec_input;
use crate::prelude::*;
use crate::procio::borrow_fd;
use crate::readline::term::{LineWriter, RawModeGuard, raw_mode};
use crate::readline::{Prompt, ReadlineEvent, ShedVi};
use crate::signal::{GOT_SIGWINCH, JOB_DONE, QUIT_CODE, check_signals, sig_setup, signals_pending};
@@ -131,7 +132,9 @@ fn main() -> ExitCode {
} else if let Some(cmd) = args.command {
exec_input(cmd, None, false, None)
} else {
shed_interactive(args)
let res = shed_interactive(args);
write(borrow_fd(*TTY_FILENO), b"\x1b[?2004l").ok(); // disable bracketed paste mode on exit
res
} {
e.print_error();
};
@@ -201,6 +204,8 @@ fn shed_interactive(args: ShedArgs) -> ShResult<()> {
}
};
readline.writer.flush_write("\x1b[?2004h")?; // enable bracketed paste mode
// Main poll loop
loop {
write_meta(|m| {