summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Altmanninger <aclopte@gmail.com>2025-01-26 13:40:57 +0100
committerHiltjo Posthuma <hiltjo@codemadness.org>2025-01-30 17:50:37 +0100
commit98610fcd37f655d44586323dc86c1d013c2798ce (patch)
tree23be46d7d1350efe6404ff8ba506b68aeb6d2ad2
parent6009e6e25bdff9548f085e9ae562b1ca305d3a0b (diff)
Do not interpret CSI ? u as DECRCHEADmaster
The kitty keyboard protocol docs recommend CSI ? u to query support for that protocol, see https://sw.kovidgoyal.net/kitty/keyboard-protocol/ For better or worse, fish shell uses this query to work around bugs in other terminals triggered by requesting that protocol via CSI = 5 u. Unfortunately, st interprets CSI ? u as DECRC (restore cursor position). reproduce with 'printf "\x1b[?u"; cat'. fish could work around this by switching to the alternate screen before running this query; but that might cause tearing on terminals that don't support Synchronized Output. I'm not sure. In the meantime, let's correct our parser. This adds a redundant else-after-return, for consistency with the surrounding code.
-rw-r--r--st.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/st.c b/st.c
index 2e3800e..03b9bc8 100644
--- a/st.c
+++ b/st.c
@@ -1801,7 +1801,11 @@ csihandle(void)
tcursor(CURSOR_SAVE);
break;
case 'u': /* DECRC -- Restore cursor position (ANSI.SYS) */
- tcursor(CURSOR_LOAD);
+ if (csiescseq.priv) {
+ goto unknown;
+ } else {
+ tcursor(CURSOR_LOAD);
+ }
break;
case ' ':
switch (csiescseq.mode[1]) {