mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-03-27 14:45:13 +08:00
builtin read: enable bracketed paste
We run __fish_enable_bracketed_paste on every shell prompt, and inside edit_command_buffer. This protects from accidents when pasting control characters, and makes sure the paste results in a single undo group. Let's do the same for builtin read. Found while doing the research for #10101
This commit is contained in:
parent
9132684617
commit
7d10a72bb3
@ -7,6 +7,7 @@ use crate::common::scoped_push_replacer;
|
|||||||
use crate::common::str2wcstring;
|
use crate::common::str2wcstring;
|
||||||
use crate::common::unescape_string;
|
use crate::common::unescape_string;
|
||||||
use crate::common::valid_var_name;
|
use crate::common::valid_var_name;
|
||||||
|
use crate::common::ScopeGuard;
|
||||||
use crate::common::UnescapeStringStyle;
|
use crate::common::UnescapeStringStyle;
|
||||||
use crate::compat::MB_CUR_MAX;
|
use crate::compat::MB_CUR_MAX;
|
||||||
use crate::env::EnvMode;
|
use crate::env::EnvMode;
|
||||||
@ -25,7 +26,9 @@ use crate::wutil;
|
|||||||
use crate::wutil::encoding::mbrtowc;
|
use crate::wutil::encoding::mbrtowc;
|
||||||
use crate::wutil::encoding::zero_mbstate;
|
use crate::wutil::encoding::zero_mbstate;
|
||||||
use crate::wutil::perror;
|
use crate::wutil::perror;
|
||||||
|
use crate::wutil::write_to_fd;
|
||||||
use libc::SEEK_CUR;
|
use libc::SEEK_CUR;
|
||||||
|
use libc::STDOUT_FILENO;
|
||||||
use std::os::fd::RawFd;
|
use std::os::fd::RawFd;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
|
|
||||||
@ -584,13 +587,21 @@ pub fn read(parser: &Parser, streams: &mut IoStreams, argv: &mut [&wstr]) -> Opt
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let stream_stdin_is_a_tty = isatty(streams.stdin_fd);
|
||||||
|
|
||||||
|
let _maybe_disable_bracketed_paste = stream_stdin_is_a_tty.then(|| {
|
||||||
|
let _ = write_to_fd(b"\x1b[?2004h", STDOUT_FILENO);
|
||||||
|
ScopeGuard::new((), |()| {
|
||||||
|
let _ = write_to_fd(b"\x1b[?2004l", STDOUT_FILENO);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
// Normally, we either consume a line of input or all available input. But if we are reading a
|
// Normally, we either consume a line of input or all available input. But if we are reading a
|
||||||
// line at a time, we need a middle ground where we only consume as many lines as we need to
|
// line at a time, we need a middle ground where we only consume as many lines as we need to
|
||||||
// fill the given vars.
|
// fill the given vars.
|
||||||
loop {
|
loop {
|
||||||
buff.clear();
|
buff.clear();
|
||||||
|
|
||||||
let stream_stdin_is_a_tty = isatty(streams.stdin_fd);
|
|
||||||
if stream_stdin_is_a_tty && !opts.split_null {
|
if stream_stdin_is_a_tty && !opts.split_null {
|
||||||
// Read interactively using reader_readline(). This does not support splitting on null.
|
// Read interactively using reader_readline(). This does not support splitting on null.
|
||||||
exit_res = read_interactive(
|
exit_res = read_interactive(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user