Do not interpret CSI ? u as DECRC - st - simple terminal | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 98610fcd37f655d44586323dc86c1d013c2798ce | |
parent 6009e6e25bdff9548f085e9ae562b1ca305d3a0b | |
Author: Johannes Altmanninger <[email protected]> | |
Date: Sun, 26 Jan 2025 13:40:57 +0100 | |
Do not interpret CSI ? u as DECRC | |
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. | |
Diffstat: | |
M st.c | 6 +++++- | |
1 file changed, 5 insertions(+), 1 deletion(-) | |
--- | |
diff --git 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]) { |