[hackers] [st][PATCH] Add support for DSR response "OK" escape sequence

From: Adam Price <komidore64_AT_gmail.com>
Date: Sun, 5 Feb 2023 18:39:24 -0500

---
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
 st.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/st.c b/st.c
index 34c27ad..21a53cc 100644
--- a/st.c
+++ b/st.c
_AT_@ -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"), 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);
 			ttywrite(buf, len, 0);
+			break;
+		default:
+			goto unknown;
 		}
 		break;
 	case 'r': /* DECSTBM -- Set Scrolling Region */
--
2.39.1
Received on Mon Feb 06 2023 - 00:39:24 CET

This archive was generated by hypermail 2.3.0 : Mon Feb 06 2023 - 01:12:33 CET