From edab1aebaa645b019ce738494a254f930a5310f5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 10 Feb 2017 16:00:51 +0530 Subject: [PATCH] Allow clients to query if the terminal emulator support styled underlines --- kitty/modes.h | 3 +++ kitty/screen.c | 2 ++ kitty_tests/parser.py | 3 +++ protocol-extensions.asciidoc | 17 +++++++++++++++++ 4 files changed, 25 insertions(+) diff --git a/kitty/modes.h b/kitty/modes.h index f4c83f676..da9f65b72 100644 --- a/kitty/modes.h +++ b/kitty/modes.h @@ -76,5 +76,8 @@ #define BRACKETED_PASTE_START "\033[200~" #define BRACKETED_PASTE_END "\033[201~" +// Styled underlines +#define STYLED_UNDERLINES (2016 << 5) + // Extended keyboard protocol #define EXTENDED_KEYBOARD (2017 << 5) diff --git a/kitty/screen.c b/kitty/screen.c index bb0d5aa98..421818868 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -923,6 +923,8 @@ report_mode_status(Screen *self, unsigned int which, bool private) { KNOWN_MODE(EXTENDED_KEYBOARD); KNOWN_MODE(FOCUS_TRACKING); #undef KNOWN_MODE + case STYLED_UNDERLINES: + ans = 3; break; } if (snprintf(buf, sizeof(buf) - 1, "\x1b[%s%u;%u$y", (private ? "?" : ""), which, ans)) callback("write_to_child", self, buf, 0); } diff --git a/kitty_tests/parser.py b/kitty_tests/parser.py index 09988cb9f..01577132f 100644 --- a/kitty_tests/parser.py +++ b/kitty_tests/parser.py @@ -139,6 +139,9 @@ class TestParser(BaseTest): pb('\033[?1l', ('screen_reset_mode', 1, 1)) self.assertFalse(s.cursor_key_mode) c.clear() + pb('\033[?2016$p', ('report_mode_status', 2016, 1)) + self.ae(c.wtcbuf, b'\033[?2016;3$y') + c.clear() pb('\033[?1$p', ('report_mode_status', 1, 1)) self.ae(c.wtcbuf, b'\033[?1;2$y') pb('\033[2;4r', ('screen_set_margins', 2, 4)) diff --git a/protocol-extensions.asciidoc b/protocol-extensions.asciidoc index f2fc3916a..ab2d73962 100644 --- a/protocol-extensions.asciidoc +++ b/protocol-extensions.asciidoc @@ -44,6 +44,23 @@ To reset the underline color (also previously reserved and unused): [59m ``` +A client can query if the terminal emulator supports this underline extension using the +standard link:http://vt100.net/docs/vt510-rm/DECRQM[DECRQM] escape sequence, with the +mode value `2016`, like this: + +Client sends: + +``` +[?2016$p +``` + +If the terminal supports this underline extension, it must respond with +link:http://vt100.net/docs/vt510-rm/DECRPM[DECRPM] + +``` +[?2016;3$p +``` + == Graphics rendering