diff options
author | Gregory Anders <greg@gpanders.com> | 2025-01-15 11:07:51 -0600 |
---|---|---|
committer | Gregory Anders <greg@gpanders.com> | 2025-01-16 16:41:08 -0600 |
commit | 6f0bde11ccd82d257fcda25ecad26227eba3335e (patch) | |
tree | 846d1ac87aa3ef423f441414934a9a4ba50f45f8 /src/nvim/vterm/vterm_internal_defs.h | |
parent | bbf36ef8ef86534e317e4e0153730a40ae4c936e (diff) | |
download | rneovim-6f0bde11ccd82d257fcda25ecad26227eba3335e.tar.gz rneovim-6f0bde11ccd82d257fcda25ecad26227eba3335e.tar.bz2 rneovim-6f0bde11ccd82d257fcda25ecad26227eba3335e.zip |
feat(terminal): add support for kitty keyboard protocol
This commit adds basic support for the kitty keyboard protocol to
Neovim's builtin terminal. For now only the first mode ("Disambiguate
escape codes") is supported.
Diffstat (limited to 'src/nvim/vterm/vterm_internal_defs.h')
-rw-r--r-- | src/nvim/vterm/vterm_internal_defs.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/nvim/vterm/vterm_internal_defs.h b/src/nvim/vterm/vterm_internal_defs.h index d4d59867bf..19e809490f 100644 --- a/src/nvim/vterm/vterm_internal_defs.h +++ b/src/nvim/vterm/vterm_internal_defs.h @@ -21,7 +21,14 @@ #define BUFIDX_PRIMARY 0 #define BUFIDX_ALTSCREEN 1 +#define KEY_ENCODING_DISAMBIGUATE 0x1 +#define KEY_ENCODING_REPORT_EVENTS 0x2 +#define KEY_ENCODING_REPORT_ALTERNATE 0x4 +#define KEY_ENCODING_REPORT_ALL_KEYS 0x8 +#define KEY_ENCODING_REPORT_ASSOCIATED 0x10 + typedef struct VTermEncoding VTermEncoding; +typedef struct VTermKeyEncodingFlags VTermKeyEncodingFlags; typedef struct { VTermEncoding *enc; @@ -46,6 +53,21 @@ struct VTermPen { unsigned baseline:2; }; +// https://sw.kovidgoyal.net/kitty/keyboard-protocol/#progressive-enhancement +struct VTermKeyEncodingFlags { + bool disambiguate:1; + bool report_events:1; + bool report_alternate:1; + bool report_all_keys:1; + bool report_associated:1; +}; + +struct VTermKeyEncodingStack { + VTermKeyEncodingFlags items[16]; + uint8_t size; ///< Number of items in the stack. This is at least 1 and at + ///< most the length of the "items" array. +}; + struct VTermState { VTerm *vt; @@ -171,6 +193,9 @@ struct VTermState { char *buffer; size_t buflen; } selection; + + // Maintain two stacks, one for primary screen and one for altscreen + struct VTermKeyEncodingStack key_encoding_stacks[2]; }; struct VTerm { |