Add support for DSR response "OK" escape sequence - st - simple terminal | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f17abd25b376c292f783062ecf821453eaa9cc4c | |
parent 7e8050cc621f27002eaf1be8114dee2497beff91 | |
Author: Adam Price <[email protected]> | |
Date: Tue, 7 Feb 2023 19:54:29 +0100 | |
Add support for DSR response "OK" escape sequence | |
"VT100 defines an escape sequence [1] called Device Status Report (DSR). When | |
the DSR sequence received is `csi 5n`, an "OK" response `csi 0n` is returned. | |
This patch adds that "OK" response. | |
I encountered this missing sequence when I noticed that fzf [2] would clobber | |
my prompt whenever completing a find. | |
To test that ST doesn't currently respond to `csi 5n`, use fzf's shell | |
extension in ST's repo to complete the path for a file. | |
my-fancy-prompt $ vim **<tab> | |
<select a file> | |
st.c | |
Select a file with <enter>, and notice that fzf clobbers some or all of your | |
prompt. | |
After applying this patch, do the same test as above and notice that fzf has no | |
longer clobbered your prompt by placing the file name in the correct position | |
in your command. | |
my-fancy-prompt $ vim **<tab> | |
<select a file> | |
my-fancy prompt $ vim st.c | |
Thank you for considering my first patch submission. | |
[1] https://www.xfree86.org/current/ctlseqs.html#VT100%20Mode | |
[2] https://github.com/junegunn/fzf | |
" | |
Patch slightly adapted with input from the mailinglist, | |
Diffstat: | |
M st.c | 13 ++++++++++--- | |
1 file changed, 10 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
@@ -1769,11 +1769,18 @@ csihandle(void) | |
case 'm': /* SGR -- Terminal attribute (color) */ | |
tsetattr(csiescseq.arg, csiescseq.narg); | |
break; | |
- case 'n': /* DSR – Device Status Report (cursor position) */ | |
- if (csiescseq.arg[0] == 6) { | |
+ case 'n': /* DSR -- Device Status Report */ | |
+ switch (csiescseq.arg[0]) { | |
+ case 5: /* Status Report "OK" `0n` */ | |
+ ttywrite("\033[0n", sizeof("\033[0n") - 1, 0); | |
+ break; | |
+ case 6: /* Report Cursor Position (CPR) "<row>;<column>R" */ | |
len = snprintf(buf, sizeof(buf), "\033[%i;%iR", | |
- term.c.y+1, term.c.x+1); | |
+ term.c.y+1, term.c.x+1); | |
ttywrite(buf, len, 0); | |
+ break; | |
+ default: | |
+ goto unknown; | |
} | |
break; | |
case 'r': /* DECSTBM -- Set Scrolling Region */ |