commit 98610fcd37f655d44586323dc86c1d013c2798ce from: Johannes Altmanninger via: Hiltjo Posthuma date: Thu Jan 30 16:50:37 2025 UTC 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. commit - 6009e6e25bdff9548f085e9ae562b1ca305d3a0b commit + 98610fcd37f655d44586323dc86c1d013c2798ce blob - 2e3800e437ecda60d015a16da9f468c576337bb4 blob + 03b9bc88b1b8335bd82c9a98c630abd99fd642db --- st.c +++ 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]) {