diff --git a/docs/changelog.rst b/docs/changelog.rst index cd357904a..900bad616 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,6 +4,11 @@ Changelog |kitty| is a feature-rich, cross-platform, *fast*, GPU based terminal. To update |kitty|, :doc:`follow the instructions `. +0.21.2 [future] +---------------------- + +- Add support for the XTVERSION escape code + 0.21.1 [2021-06-14] ---------------------- diff --git a/kitty/parser.c b/kitty/parser.c index 623e0dc28..e541a2bd7 100644 --- a/kitty/parser.c +++ b/kitty/parser.c @@ -935,7 +935,14 @@ dispatch_csi(Screen *screen, PyObject DUMP_UNUSED *dump_callback) { REPORT_ERROR("Unknown CSI x sequence with start and end modifiers: '%c' '%c'", start_modifier, end_modifier); break; case DECSCUSR: - CALL_CSI_HANDLER1M(screen_set_cursor, 1); + if (!start_modifier && end_modifier == ' ') { + CALL_CSI_HANDLER1M(screen_set_cursor, 1); + } + if (start_modifier == '>' && !end_modifier) { + CALL_CSI_HANDLER1(screen_xtversion, 0); + } + REPORT_ERROR("Unknown CSI q sequence with start and end modifiers: '%c' '%c'", start_modifier, end_modifier); + break; case SU: NO_MODIFIERS(end_modifier, ' ', "Select presentation directions escape code not implemented"); CALL_CSI_HANDLER1(screen_scroll, 1); diff --git a/kitty/screen.c b/kitty/screen.c index b76b412c5..90b7c8df1 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -1527,6 +1527,13 @@ report_device_attributes(Screen *self, unsigned int mode, char start_modifier) { } } +void +screen_xtversion(Screen *self, unsigned int mode) { + if (mode == 0) { + write_escape_code_to_child(self, DCS, ">|kitty(" XT_VERSION ")"); + } +} + void screen_report_size(Screen *self, unsigned int which) { char buf[32] = {0}; diff --git a/kitty/screen.h b/kitty/screen.h index 4d95193d5..36090bd98 100644 --- a/kitty/screen.h +++ b/kitty/screen.h @@ -166,6 +166,7 @@ void screen_clear_tab_stop(Screen *self, unsigned int how); void screen_set_mode(Screen *self, unsigned int mode); void screen_reset_mode(Screen *self, unsigned int mode); void screen_decsace(Screen *self, unsigned int); +void screen_xtversion(Screen *self, unsigned int); void screen_insert_characters(Screen *self, unsigned int count); void screen_cursor_up(Screen *self, unsigned int count/*=1*/, bool do_carriage_return/*=false*/, int move_direction/*=-1*/); void screen_set_cursor(Screen *self, unsigned int mode, uint8_t secondary); diff --git a/setup.py b/setup.py index 11192d2d1..2a5d2ac6d 100755 --- a/setup.py +++ b/setup.py @@ -374,6 +374,7 @@ def kitty_env() -> Env: cppflags = ans.cppflags cppflags.append('-DPRIMARY_VERSION={}'.format(version[0] + 4000)) cppflags.append('-DSECONDARY_VERSION={}'.format(version[1])) + cppflags.append('-DXT_VERSION="{}"'.format('.'.join(map(str, version)))) at_least_version('harfbuzz', 1, 5) cflags.extend(pkg_config('libpng', '--cflags-only-I')) cflags.extend(pkg_config('lcms2', '--cflags-only-I'))