mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-14 03:02:52 +08:00
Work around st terminal resetting cursor on CSI ? u
The st terminal wrongly parses CSI ? u as DECRC. A fix has been proposed upstream. Let's also work around it I guess (not to mention that querying in the first place is also sort of a workaround).
This commit is contained in:
parent
95d61ea0fb
commit
630a06cf8f
|
@ -19,9 +19,9 @@ use crate::{
|
||||||
env::env_init,
|
env::env_init,
|
||||||
input::input_terminfo_get_name,
|
input::input_terminfo_get_name,
|
||||||
input_common::{
|
input_common::{
|
||||||
enable_kitty_progressive_enhancements, terminal_protocol_hacks,
|
enable_kitty_progressive_enhancements, kitty_progressive_enhancements_query,
|
||||||
terminal_protocols_enable_ifn, CharEvent, ImplicitEvent, InputEventQueue, InputEventQueuer,
|
terminal_protocol_hacks, terminal_protocols_enable_ifn, CharEvent, ImplicitEvent,
|
||||||
KITTY_PROGRESSIVE_ENHANCEMENTS_QUERY,
|
InputEventQueue, InputEventQueuer,
|
||||||
},
|
},
|
||||||
key::{char_to_symbol, Key},
|
key::{char_to_symbol, Key},
|
||||||
nix::isatty,
|
nix::isatty,
|
||||||
|
@ -144,7 +144,7 @@ fn setup_and_process_keys(streams: &mut IoStreams, continuous_mode: bool, verbos
|
||||||
terminal_protocol_hacks();
|
terminal_protocol_hacks();
|
||||||
streams
|
streams
|
||||||
.out
|
.out
|
||||||
.append(str2wcstring(KITTY_PROGRESSIVE_ENHANCEMENTS_QUERY));
|
.append(str2wcstring(kitty_progressive_enhancements_query()));
|
||||||
|
|
||||||
if continuous_mode {
|
if continuous_mode {
|
||||||
streams.err.append(L!("\n"));
|
streams.err.append(L!("\n"));
|
||||||
|
|
|
@ -458,7 +458,12 @@ macro_rules! kitty_progressive_enhancements {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const KITTY_PROGRESSIVE_ENHANCEMENTS_QUERY: &[u8] = b"\x1b[?u";
|
pub fn kitty_progressive_enhancements_query() -> &'static [u8] {
|
||||||
|
if std::env::var_os("TERM").is_some_and(|term| term.as_os_str().as_bytes() == b"st-256color") {
|
||||||
|
return b"";
|
||||||
|
}
|
||||||
|
b"\x1b[?u"
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn enable_kitty_progressive_enhancements() -> bool {
|
pub(crate) fn enable_kitty_progressive_enhancements() -> bool {
|
||||||
if IN_MIDNIGHT_COMMANDER_PRE_CSI_U.load() || IN_ITERM_PRE_CSI_U.load() {
|
if IN_MIDNIGHT_COMMANDER_PRE_CSI_U.load() || IN_ITERM_PRE_CSI_U.load() {
|
||||||
|
|
|
@ -82,12 +82,12 @@ use crate::history::{
|
||||||
};
|
};
|
||||||
use crate::input::init_input;
|
use crate::input::init_input;
|
||||||
use crate::input_common::enable_kitty_progressive_enhancements;
|
use crate::input_common::enable_kitty_progressive_enhancements;
|
||||||
|
use crate::input_common::kitty_progressive_enhancements_query;
|
||||||
use crate::input_common::CursorPositionBlockingWait;
|
use crate::input_common::CursorPositionBlockingWait;
|
||||||
use crate::input_common::CursorPositionWait;
|
use crate::input_common::CursorPositionWait;
|
||||||
use crate::input_common::ImplicitEvent;
|
use crate::input_common::ImplicitEvent;
|
||||||
use crate::input_common::InputEventQueuer;
|
use crate::input_common::InputEventQueuer;
|
||||||
use crate::input_common::IN_MIDNIGHT_COMMANDER_PRE_CSI_U;
|
use crate::input_common::IN_MIDNIGHT_COMMANDER_PRE_CSI_U;
|
||||||
use crate::input_common::KITTY_PROGRESSIVE_ENHANCEMENTS_QUERY;
|
|
||||||
use crate::input_common::{
|
use crate::input_common::{
|
||||||
terminal_protocol_hacks, terminal_protocols_enable_ifn, CharEvent, CharInputStyle, InputData,
|
terminal_protocol_hacks, terminal_protocols_enable_ifn, CharEvent, CharInputStyle, InputData,
|
||||||
ReadlineCmd,
|
ReadlineCmd,
|
||||||
|
@ -2163,7 +2163,7 @@ impl<'a> Reader<'a> {
|
||||||
let mut out = Outputter::stdoutput().borrow_mut();
|
let mut out = Outputter::stdoutput().borrow_mut();
|
||||||
out.begin_buffering();
|
out.begin_buffering();
|
||||||
// Query for kitty keyboard protocol support.
|
// Query for kitty keyboard protocol support.
|
||||||
let _ = out.write(KITTY_PROGRESSIVE_ENHANCEMENTS_QUERY);
|
let _ = out.write(kitty_progressive_enhancements_query());
|
||||||
// Query for cursor position reporting support.
|
// Query for cursor position reporting support.
|
||||||
zelf.request_cursor_position(&mut out, CursorPositionWait::InitialFeatureProbe);
|
zelf.request_cursor_position(&mut out, CursorPositionWait::InitialFeatureProbe);
|
||||||
// Query for synchronized output support.
|
// Query for synchronized output support.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user