fix(tui): the Shift+Enter hint follows the protocol, not a brand list
`shift_enter_unavailable` kept its own list of brands and missed every other reason the Kitty keyboard protocol gets skipped: JetBrains, screen, tmux below 3.3 and tmux with `extended-keys off` all swallow it, yet the prompt still advertised Shift+Enter there. It now reads `kitty_skip_reason` directly. Two skips deliver the modifier another way and stay available: Apple Terminal, where `route_enter` polls CoreGraphics, and Windows Terminal, where the console key record carries SHIFT — a bare ConHost, only optimistically refined to Windows Terminal, keeps advertising Alt+Enter. The old list also carried a `VTE_VERSION >= 8200` cutoff, citing VTE 0.82.0 as the first release with the protocol. It is not: at tag 0.82.0 the string "kitty" appears nowhere in `src/parser-seq.py`, `src/vte.cc` or `src/widget.cc`, and `_vte_keymap_GDK_Return` encodes only Alt (`ESC CR`), so Shift+Enter leaves a VTE terminal as the same bare CR as Enter. Every VTE now advertises Alt+Enter, and `/terminal-setup` stops telling GNOME Terminal users to upgrade to a version that would not help. It also stops advertising Alt+Enter to WezTerm, which binds that chord to ToggleFullScreen.
This commit is contained in:
3 files changed
+78
-136
No files matched your search
@@ -96,16 +96,15 @@ impl SlashCommand for TerminalSetupCommand {
|
||||
|
||||
// Some terminals can't distinguish Shift+Enter from bare Enter at
|
||||
// the byte level because the Kitty keyboard protocol isn't
|
||||
// negotiated (VTE < 0.82, or VS Code's xterm.js which mis-encodes
|
||||
// shifted keys). Point users at Alt+Enter, which is reliably
|
||||
// delivered as ESC+CR. Suppressed when the WezTerm warning fired:
|
||||
// stock WezTerm binds Alt+Enter to ToggleFullScreen, so advertising
|
||||
// it would contradict that warning's `\`+Enter guidance.
|
||||
if ctx.shift_enter_unavailable() && !wezterm_kkp_off {
|
||||
// negotiated (VTE, VS Code's xterm.js, a multiplexer that eats
|
||||
// extended keys). Point users at Alt+Enter, which is reliably
|
||||
// delivered as ESC+CR. Never for WezTerm: it binds Alt+Enter to
|
||||
// ToggleFullScreen, so its own warning's `\`+Enter guidance stands.
|
||||
if ctx.shift_enter_unavailable() && !wezterm_kkp_off && ctx.brand != TerminalName::WezTerm {
|
||||
let detail = if ctx.vte_version.is_some() || ctx.brand == TerminalName::Vte {
|
||||
match ctx.vte_version.as_deref() {
|
||||
Some(v) => format!("VTE {v}; need >= 8200 for Shift+Enter"),
|
||||
None => "legacy VTE; need VTE >= 0.82 for Shift+Enter".to_owned(),
|
||||
Some(v) => format!("VTE {v}: no Kitty keyboard protocol"),
|
||||
None => "VTE: no Kitty keyboard protocol".to_owned(),
|
||||
}
|
||||
} else if matches!(
|
||||
ctx.brand,
|
||||
|
||||
Reference in new issue
Block a user