summaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
authorAdam Price <komidore64@gmail.com>2023-02-07 19:54:29 +0100
committerRafael Marçalo <raroma09@gmail.com>2023-02-07 23:18:14 +0000
commit048fb83b5c32f67a94c630b810dc68b998331b91 (patch)
tree2f3c81d214b4fe293b5a6f3abd53bd9b619c64a7 /st.c
parent72424ab5f5d00af01ae71baf17407f98032f439b (diff)
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 (limited to 'st.c')
-rw-r--r--st.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/st.c b/st.c
index e170309..5e95f15 100644
--- a/st.c
+++ b/st.c
@@ -1831,11 +1831,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 */