commit a4c9247a1ad1cac7ea7739de9b5c189005a68c12
parent 6dd6c5b523b11a1316f7c161217bd7b97cdb8b39
Author: bfredl <bjorn.linse@gmail.com>
Date: Wed, 29 Oct 2025 10:28:50 +0100
Merge pull request #36233 from bfredl/neotermkeyi
refactor(termkey): make termkey use builtin info
Diffstat:
14 files changed, 2146 insertions(+), 1055 deletions(-)
diff --git a/src/gen/gen_terminfo.lua b/src/gen/gen_terminfo.lua
@@ -7,7 +7,7 @@
-- 3. Use database to generate src/nvim/tui/terminfo_defs.h
local url = 'https://invisible-island.net/datafiles/current/terminfo.src.gz'
-local target_gen = 'src/nvim/tui/terminfo_defs.h'
+local target_gen = 'src/nvim/tui/terminfo_builtin.h'
local target_enum = 'src/nvim/tui/terminfo_enum_defs.h'
local entries = {
@@ -84,6 +84,25 @@ local wanted_strings_ext = {
{ 'set_underline_style', 'Smulx' },
}
+-- Note: these are only consumed by driver-ti via it's table of "funcs" keys.
+-- Second value is whether there is a "shift" variant in terminfo.
+local wanted_termkeys = {
+ { 'backspace', false },
+ { 'beg', true }, -- sometimes known as: "begin"
+ { 'btab', false },
+ { 'clear', false },
+ { 'dc', true },
+ { 'end', true },
+ { 'find', true },
+ { 'home', true },
+ { 'ic', true },
+ { 'npage', false },
+ { 'ppage', false },
+ { 'select', false },
+ { 'suspend', true },
+ { 'undo', true },
+}
+
local db = '/tmp/nvim_terminfo'
if vim.uv.fs_stat(db) == nil then
local function sys(cmd)
@@ -130,7 +149,23 @@ for _, item in ipairs(wanted_strings_ext) do
f_enum:write(' ' .. enumify(item[1]) .. ',\n')
end
f_enum:write(' kTermCount, // sentinel\n')
-f_enum:write('} TerminfoDef;\n')
+f_enum:write('} TerminfoDef;\n\n')
+
+f_enum:write([[
+// TODO(bfredl): physical F-keys beyond F12 are uncommon. But terminfo
+// likes to represent chords with shift and/or ctrl and F keys as high
+// F-key numbers. The same chords can also be recognized by driver-csi.c
+// but will then be encoded as chords. We might actually prefer that but it is
+// potentially breaking change.
+]])
+local func_key_max = 63
+f_enum:write('#define kTerminfoFuncKeyMax ' .. func_key_max .. '\n')
+f_enum:write('typedef enum {\n')
+for _, item in ipairs(wanted_termkeys) do
+ f_enum:write(' kTermKey_' .. item[1] .. ',\n')
+end
+f_enum:write(' kTermKeyCount,\n')
+f_enum:write('} TerminfoKey;\n')
f_enum:close()
local f_defs = io.open(target_gen, 'wb')
@@ -141,7 +176,7 @@ local version = io.popen('infocmp -V'):read '*a'
f_defs:write('// Generated by src/gen/gen_terminfo.lua and ' .. version .. '\n')
f_defs:write('#pragma once\n\n')
-f_defs:write('#include "nvim/tui/terminfo.h"\n')
+f_defs:write('#include "nvim/tui/terminfo_defs.h"\n')
for _, entry in ipairs(entries) do
local term, target = unpack(entry)
@@ -186,8 +221,34 @@ for _, entry in ipairs(entries) do
for _, item in ipairs(wanted_strings_ext) do
f_defs:write(' [' .. enumify(item[1]) .. '] = ' .. quote(strs[item[2]]) .. ',\n')
end
-
f_defs:write(' },\n')
+ f_defs:write(' .keys = {\n')
+ for _, item in ipairs(wanted_termkeys) do
+ local name = item[1]
+ f_defs:write(
+ ' [kTermKey_'
+ .. name
+ .. '] = {'
+ .. quote(strs['key_' .. name])
+ .. ', '
+ .. quote(strs['key_s' .. name])
+ .. '},\n'
+ )
+ end
+ f_defs:write(' },\n')
+ f_defs:write(' .f_keys = {\n')
+ if strs['key_f1'] == nil then
+ f_defs:write(' NULL,\n') -- compiler get sad if list is empty
+ else
+ f_defs:write(' // note: offset by one, f_keys[0] is F1 and so on\n')
+ end
+ for i = 1, func_key_max do
+ if strs['key_f' .. i] ~= nil then
+ f_defs:write(' [' .. i - 1 .. '] = ' .. quote(strs['key_f' .. i]) .. ',\n')
+ end
+ end
+ f_defs:write(' },\n')
+
f_defs:write('};\n')
end
@@ -200,5 +261,15 @@ f_defs:write('#define XLIST_TERMINFO_EXT \\\n')
for _, item in ipairs(wanted_strings_ext) do
f_defs:write(' X(' .. item[1] .. ', ' .. item[2] .. ') \\\n')
end
+f_defs:write('// end of list\n\n')
+f_defs:write('#define XYLIST_TERMINFO_KEYS \\\n')
+for _, item in ipairs(wanted_termkeys) do
+ f_defs:write(' ' .. (item[2] and 'Y' or 'X') .. '(' .. item[1] .. ') \\\n')
+end
+f_defs:write('// end of list\n\n')
+f_defs:write('#define XLIST_TERMINFO_FKEYS \\\n')
+for i = 1, func_key_max do
+ f_defs:write(' X(f' .. i .. ') \\\n')
+end
f_defs:write('// end of list\n')
f_defs:close()
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
@@ -123,7 +123,7 @@ static PMap(int) kitty_key_map = MAP_INIT;
#include "tui/input.c.generated.h"
-void tinput_init(TermInput *input, Loop *loop)
+void tinput_init(TermInput *input, Loop *loop, TerminfoEntry *ti)
{
input->loop = loop;
input->paste = 0;
@@ -136,14 +136,8 @@ void tinput_init(TermInput *input, Loop *loop)
pmap_put(int)(&kitty_key_map, kitty_key_map_entry[i].key, (ptr_t)kitty_key_map_entry[i].name);
}
- const char *term = os_getenv_noalloc("TERM");
-
- if (!term) {
- term = ""; // termkey_new_abstract assumes non-null (#2745)
- }
-
- input->tk = termkey_new_abstract(term, (TERMKEY_FLAG_UTF8 | TERMKEY_FLAG_NOSTART
- | TERMKEY_FLAG_KEEPC0));
+ input->tk = termkey_new_abstract(ti, (TERMKEY_FLAG_UTF8 | TERMKEY_FLAG_NOSTART
+ | TERMKEY_FLAG_KEEPC0));
termkey_set_buffer_size(input->tk, INPUT_BUFFER_SIZE);
termkey_hook_terminfo_getstr(input->tk, input->tk_ti_hook_fn, input);
termkey_start(input->tk);
diff --git a/src/nvim/tui/terminfo.c b/src/nvim/tui/terminfo.c
@@ -11,7 +11,7 @@
#include "nvim/charset.h"
#include "nvim/memory.h"
#include "nvim/tui/terminfo.h"
-#include "nvim/tui/terminfo_defs.h"
+#include "nvim/tui/terminfo_builtin.h"
#ifdef __FreeBSD__
# include "nvim/os/os.h"
@@ -180,6 +180,36 @@ bool terminfo_from_unibilium(TerminfoEntry *ti, char *termname, Arena *arena)
}
}
+#define X(name) { unibi_key_##name, unibi_string_begin_ },
+#define Y(name) { unibi_key_##name, unibi_key_s##name },
+ static const enum unibi_string uni_keys[][2] = {
+ XYLIST_TERMINFO_KEYS
+ };
+#undef X
+#undef Y
+
+ for (size_t i = 0; i < ARRAY_SIZE(uni_keys); i++) {
+ const char *val = unibi_get_str(ut, uni_keys[i][0]);
+ if (val) {
+ ti->keys[i][0] = arena_strdup(arena, val);
+ if (uni_keys[i][1] != unibi_string_begin_) {
+ const char *sval = unibi_get_str(ut, uni_keys[i][1]);
+ ti->keys[i][1] = sval ? arena_strdup(arena, sval) : NULL;
+ }
+ }
+ }
+
+ static const enum unibi_string uni_fkeys[] = {
+#define X(name) unibi_key_##name,
+ XLIST_TERMINFO_FKEYS
+#undef X
+ };
+
+ for (size_t i = 0; i < ARRAY_SIZE(uni_fkeys); i++) {
+ const char *val = unibi_get_str(ut, uni_fkeys[i]);
+ ti->f_keys[i] = val ? arena_strdup(arena, val) : NULL;
+ }
+
unibi_destroy(ut);
return true;
}
@@ -223,7 +253,7 @@ String terminfo_info_msg(const TerminfoEntry *ti, const char *termname)
#undef X
};
- for (size_t i = 0 + 1; i < ARRAY_SIZE(string_names); i++) {
+ for (size_t i = 0; i < ARRAY_SIZE(string_names); i++) {
const char *s = ti->defs[i];
if (s) {
kv_printf(data, " %-31s = ", string_names[i]);
@@ -233,8 +263,44 @@ String terminfo_info_msg(const TerminfoEntry *ti, const char *termname)
}
}
- kv_push(data, NUL);
+ static const char *key_names[] = {
+#define X(name) #name,
+#define Y(name) #name,
+ XYLIST_TERMINFO_KEYS
+#undef X
+#undef Y
+ };
+ for (size_t i = 0 + 1; i < ARRAY_SIZE(key_names); i++) {
+ const char *s = ti->keys[i][0];
+ if (s) {
+ kv_printf(data, " key_%-27s = ", key_names[i]);
+ kv_transstr(&data, s, false);
+ const char *ss = ti->keys[i][1];
+ if (ss) {
+ kv_printf(data, ", key_s%s = ", key_names[i]);
+ kv_transstr(&data, ss, false);
+ }
+ kv_push(data, '\n');
+ }
+ }
+
+ static const char *fkey_names[] = {
+#define X(name) #name,
+ XLIST_TERMINFO_FKEYS
+#undef X
+ };
+
+ for (size_t i = 0 + 1; i < ARRAY_SIZE(fkey_names); i++) {
+ const char *s = ti->f_keys[i];
+ if (s) {
+ kv_printf(data, " key_%-27s = ", fkey_names[i]);
+ kv_transstr(&data, s, false);
+ kv_push(data, '\n');
+ }
+ }
+
+ kv_push(data, NUL);
return cbuf_as_string(data.items, data.size - 1);
}
diff --git a/src/nvim/tui/terminfo.h b/src/nvim/tui/terminfo.h
@@ -1,19 +1,7 @@
#pragma once
#include "nvim/api/private/defs.h" // IWYU pragma: keep
-#include "nvim/tui/terminfo_enum_defs.h"
-
-typedef struct {
- bool bce;
- // these extended booleans indicate likely 24-color support
- bool has_Tc_or_RGB;
- bool Su;
-
- int max_colors;
- int lines;
- int columns;
- const char *defs[kTermCount];
-} TerminfoEntry;
+#include "nvim/tui/terminfo_defs.h"
typedef struct {
long num;
diff --git a/src/nvim/tui/terminfo_builtin.h b/src/nvim/tui/terminfo_builtin.h
@@ -0,0 +1,1868 @@
+// uncrustify:off
+
+// Generated by src/gen/gen_terminfo.lua and ncurses 6.5.20240427
+
+#pragma once
+
+#include "nvim/tui/terminfo_defs.h"
+
+static const TerminfoEntry ansi_terminfo = {
+ .bce = false,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 8,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = NULL,
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\033[B",
+ [kTerm_cursor_invisible] = NULL,
+ [kTerm_cursor_left] = "\033[D",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = NULL,
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = NULL,
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[0;10m",
+ [kTerm_exit_ca_mode] = NULL,
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[4%p1%dm",
+ [kTerm_set_a_foreground] = "\033[3%p1%dm",
+ [kTerm_set_attributes] = "\033[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {NULL, NULL},
+ [kTermKey_end] = {NULL, NULL},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[H", NULL},
+ [kTermKey_ic] = {"\033[L", NULL},
+ [kTermKey_npage] = {NULL, NULL},
+ [kTermKey_ppage] = {NULL, NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ NULL,
+ },
+};
+
+static const TerminfoEntry interix_8colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 8,
+ .lines = 25,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = NULL,
+ [kTerm_clear_screen] = "\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = NULL,
+ [kTerm_cursor_left] = "\033[D",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = NULL,
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[s\033[1b",
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[0m",
+ [kTerm_exit_ca_mode] = "\033[2b\033[u\r\033[K",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[4%p1%dm",
+ [kTerm_set_a_foreground] = "\033[3%p1%dm",
+ [kTerm_set_attributes] = NULL,
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\177", NULL},
+ [kTermKey_end] = {"\033[U", NULL},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[H", NULL},
+ [kTermKey_ic] = {"\033[L", NULL},
+ [kTermKey_npage] = {"\033[T", NULL},
+ [kTermKey_ppage] = {"\033[S", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033F1",
+ [1] = "\033F2",
+ [2] = "\033F3",
+ [3] = "\033F4",
+ [4] = "\033F5",
+ [5] = "\033F6",
+ [6] = "\033F7",
+ [7] = "\033F8",
+ [8] = "\033F9",
+ [9] = "\033FA",
+ [10] = "\033FB",
+ [11] = "\033FC",
+ [12] = "\033FD",
+ [13] = "\033FE",
+ [14] = "\033FF",
+ [15] = "\033FG",
+ [16] = "\033FH",
+ [17] = "\033FI",
+ [18] = "\033FJ",
+ [19] = "\033FK",
+ [20] = "\033FL",
+ [21] = "\033FM",
+ [22] = "\033FN",
+ [23] = "\033FO",
+ [24] = "\033FP",
+ [25] = "\033FQ",
+ [26] = "\033FR",
+ [27] = "\033FS",
+ [28] = "\033FT",
+ [29] = "\033FU",
+ [30] = "\033FV",
+ [31] = "\033FW",
+ [32] = "\033FX",
+ [33] = "\033FY",
+ [34] = "\033FZ",
+ [35] = "\033Fa",
+ [36] = "\033Fb",
+ [37] = "\033Fc",
+ [38] = "\033Fd",
+ [39] = "\033Fe",
+ [40] = "\033Ff",
+ [41] = "\033Fg",
+ [42] = "\033Fh",
+ [43] = "\033Fi",
+ [44] = "\033Fj",
+ [45] = "\033Fk",
+ [46] = "\033Fm",
+ [47] = "\033Fn",
+ [48] = "\033Fo",
+ [49] = "\033Fp",
+ [50] = "\033Fq",
+ [51] = "\033Fr",
+ [52] = "\033Fs",
+ [53] = "\033Ft",
+ [54] = "\033Fu",
+ [55] = "\033Fv",
+ [56] = "\033Fw",
+ [57] = "\033Fx",
+ [58] = "\033Fy",
+ [59] = "\033Fz",
+ },
+};
+
+static const TerminfoEntry iterm_256colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[m\017",
+ [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
+ [kTerm_from_status_line] = "\a",
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = "\033]2;",
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = "\033[9m",
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = "\033[4\072%p1%dm",
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", NULL},
+ [kTermKey_end] = {"\033OF", "\033[1;2F"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033OH", "\033[1;2H"},
+ [kTermKey_ic] = {NULL, NULL},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033OP",
+ [1] = "\033OQ",
+ [2] = "\033OR",
+ [3] = "\033OS",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[1;2P",
+ [13] = "\033[1;2Q",
+ [14] = "\033[1;2R",
+ [15] = "\033[1;2S",
+ [16] = "\033[15;2~",
+ [17] = "\033[17;2~",
+ [18] = "\033[18;2~",
+ [19] = "\033[19;2~",
+ [20] = "\033[20;2~",
+ [21] = "\033[21;2~",
+ [22] = "\033[23;2~",
+ [23] = "\033[24;2~",
+ },
+};
+
+static const TerminfoEntry linux_16colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 8,
+ .lines = -1,
+ .columns = -1,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l\033[?1c",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h\033[?0c",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = NULL,
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[m\017",
+ [kTerm_exit_ca_mode] = NULL,
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[4%p1%dm",
+ [kTerm_set_a_foreground] = "\033[3%p1%dm",
+ [kTerm_set_attributes] = "\033[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033^I", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", NULL},
+ [kTermKey_end] = {"\033[4~", NULL},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", NULL},
+ [kTermKey_ic] = {"\033[2~", NULL},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {"^Z", NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[[A",
+ [1] = "\033[[B",
+ [2] = "\033[[C",
+ [3] = "\033[[D",
+ [4] = "\033[[E",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ },
+};
+
+static const TerminfoEntry putty_256colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = -1,
+ .columns = -1,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\033D",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h",
+ [kTerm_cursor_up] = "\033M",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h",
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[m\017",
+ [kTerm_exit_ca_mode] = "\033[?1049l",
+ [kTerm_from_status_line] = "\a",
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = "\033]0;",
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = "\033[9m",
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", NULL},
+ [kTermKey_end] = {"\033[4~", NULL},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", NULL},
+ [kTermKey_ic] = {"\033[2~", NULL},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {"^Z", NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[11~",
+ [1] = "\033[12~",
+ [2] = "\033[13~",
+ [3] = "\033[14~",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ },
+};
+
+static const TerminfoEntry rxvt_256colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\0337\033[?47h",
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[m\017",
+ [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033>",
+ [kTerm_keypad_xmit] = "\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3$"},
+ [kTermKey_end] = {"\033[8~", "\033[8$"},
+ [kTermKey_find] = {"\033[1~", NULL},
+ [kTermKey_home] = {"\033[7~", "\033[7$"},
+ [kTermKey_ic] = {"\033[2~", "\033[2$"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {"\033[4~", NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[11~",
+ [1] = "\033[12~",
+ [2] = "\033[13~",
+ [3] = "\033[14~",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ [20] = "\033[23$",
+ [21] = "\033[24$",
+ [22] = "\033[11\136",
+ [23] = "\033[12\136",
+ [24] = "\033[13\136",
+ [25] = "\033[14\136",
+ [26] = "\033[15\136",
+ [27] = "\033[17\136",
+ [28] = "\033[18\136",
+ [29] = "\033[19\136",
+ [30] = "\033[20\136",
+ [31] = "\033[21\136",
+ [32] = "\033[23\136",
+ [33] = "\033[24\136",
+ [34] = "\033[25\136",
+ [35] = "\033[26\136",
+ [36] = "\033[28\136",
+ [37] = "\033[29\136",
+ [38] = "\033[31\136",
+ [39] = "\033[32\136",
+ [40] = "\033[33\136",
+ [41] = "\033[34\136",
+ [42] = "\033[23@",
+ [43] = "\033[24@",
+ },
+};
+
+static const TerminfoEntry screen_256colour_terminfo = {
+ .bce = false,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[34h\033[?25h",
+ [kTerm_cursor_up] = "\033M",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h",
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[3m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[m\017",
+ [kTerm_exit_ca_mode] = "\033[?1049l",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", NULL},
+ [kTermKey_end] = {"\033[4~", NULL},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", NULL},
+ [kTermKey_ic] = {"\033[2~", NULL},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033OP",
+ [1] = "\033OQ",
+ [2] = "\033OR",
+ [3] = "\033OS",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ },
+};
+
+static const TerminfoEntry st_256colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[0m",
+ [kTerm_exit_ca_mode] = "\033[?1049l",
+ [kTerm_from_status_line] = "\a",
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "%?%p9%t\033(0%e\033(B%;\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = "\033]0;",
+ [kTerm_reset_cursor_style] = "\033[2 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = "\033[9m",
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {NULL, NULL},
+ [kTermKey_clear] = {"\033[3;5~", NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033[4~", "\033[1;2F"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", "\033[1;2H"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033OP",
+ [1] = "\033OQ",
+ [2] = "\033OR",
+ [3] = "\033OS",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[1;2P",
+ [13] = "\033[1;2Q",
+ [14] = "\033[1;2R",
+ [15] = "\033[1;2S",
+ [16] = "\033[15;2~",
+ [17] = "\033[17;2~",
+ [18] = "\033[18;2~",
+ [19] = "\033[19;2~",
+ [20] = "\033[20;2~",
+ [21] = "\033[21;2~",
+ [22] = "\033[23;2~",
+ [23] = "\033[24;2~",
+ [24] = "\033[1;5P",
+ [25] = "\033[1;5Q",
+ [26] = "\033[1;5R",
+ [27] = "\033[1;5S",
+ [28] = "\033[15;5~",
+ [29] = "\033[17;5~",
+ [30] = "\033[18;5~",
+ [31] = "\033[19;5~",
+ [32] = "\033[20;5~",
+ [33] = "\033[21;5~",
+ [34] = "\033[23;5~",
+ [35] = "\033[24;5~",
+ [36] = "\033[1;6P",
+ [37] = "\033[1;6Q",
+ [38] = "\033[1;6R",
+ [39] = "\033[1;6S",
+ [40] = "\033[15;6~",
+ [41] = "\033[17;6~",
+ [42] = "\033[18;6~",
+ [43] = "\033[19;6~",
+ [44] = "\033[20;6~",
+ [45] = "\033[21;6~",
+ [46] = "\033[23;6~",
+ [47] = "\033[24;6~",
+ [48] = "\033[1;3P",
+ [49] = "\033[1;3Q",
+ [50] = "\033[1;3R",
+ [51] = "\033[1;3S",
+ [52] = "\033[15;3~",
+ [53] = "\033[17;3~",
+ [54] = "\033[18;3~",
+ [55] = "\033[19;3~",
+ [56] = "\033[20;3~",
+ [57] = "\033[21;3~",
+ [58] = "\033[23;3~",
+ [59] = "\033[24;3~",
+ [60] = "\033[1;4P",
+ [61] = "\033[1;4Q",
+ [62] = "\033[1;4R",
+ },
+};
+
+static const TerminfoEntry tmux_256colour_terminfo = {
+ .bce = false,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[34h\033[?25h",
+ [kTerm_cursor_up] = "\033M",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[m\017",
+ [kTerm_exit_ca_mode] = "\033[?1049l",
+ [kTerm_from_status_line] = "\a",
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = "\033]0;",
+ [kTerm_reset_cursor_style] = "\033[2 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = "\033[9m",
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
+ [kTerm_reset_cursor_color] = "\033]112\a",
+ [kTerm_set_underline_style] = "\033[4\072%p1%dm",
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033[4~", "\033[1;2F"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", "\033[1;2H"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033OP",
+ [1] = "\033OQ",
+ [2] = "\033OR",
+ [3] = "\033OS",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[1;2P",
+ [13] = "\033[1;2Q",
+ [14] = "\033[1;2R",
+ [15] = "\033[1;2S",
+ [16] = "\033[15;2~",
+ [17] = "\033[17;2~",
+ [18] = "\033[18;2~",
+ [19] = "\033[19;2~",
+ [20] = "\033[20;2~",
+ [21] = "\033[21;2~",
+ [22] = "\033[23;2~",
+ [23] = "\033[24;2~",
+ [24] = "\033[1;5P",
+ [25] = "\033[1;5Q",
+ [26] = "\033[1;5R",
+ [27] = "\033[1;5S",
+ [28] = "\033[15;5~",
+ [29] = "\033[17;5~",
+ [30] = "\033[18;5~",
+ [31] = "\033[19;5~",
+ [32] = "\033[20;5~",
+ [33] = "\033[21;5~",
+ [34] = "\033[23;5~",
+ [35] = "\033[24;5~",
+ [36] = "\033[1;6P",
+ [37] = "\033[1;6Q",
+ [38] = "\033[1;6R",
+ [39] = "\033[1;6S",
+ [40] = "\033[15;6~",
+ [41] = "\033[17;6~",
+ [42] = "\033[18;6~",
+ [43] = "\033[19;6~",
+ [44] = "\033[20;6~",
+ [45] = "\033[21;6~",
+ [46] = "\033[23;6~",
+ [47] = "\033[24;6~",
+ [48] = "\033[1;3P",
+ [49] = "\033[1;3Q",
+ [50] = "\033[1;3R",
+ [51] = "\033[1;3S",
+ [52] = "\033[15;3~",
+ [53] = "\033[17;3~",
+ [54] = "\033[18;3~",
+ [55] = "\033[19;3~",
+ [56] = "\033[20;3~",
+ [57] = "\033[21;3~",
+ [58] = "\033[23;3~",
+ [59] = "\033[24;3~",
+ [60] = "\033[1;4P",
+ [61] = "\033[1;4Q",
+ [62] = "\033[1;4R",
+ },
+};
+
+static const TerminfoEntry vte_256colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[0m\017",
+ [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t^N%e\017%;",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = "\033[1 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = "\033[9m",
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
+ [kTerm_reset_cursor_color] = "\033]112\a",
+ [kTerm_set_underline_style] = "\033[4\072%p1%dm",
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\177", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033OF", "\033[1;2F"},
+ [kTermKey_find] = {"\033[1~", NULL},
+ [kTermKey_home] = {"\033OH", "\033[1;2H"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {"\033[4~", NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033OP",
+ [1] = "\033OQ",
+ [2] = "\033OR",
+ [3] = "\033OS",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[1;2P",
+ [13] = "\033[1;2Q",
+ [14] = "\033[1;2R",
+ [15] = "\033[1;2S",
+ [16] = "\033[15;2~",
+ [17] = "\033[17;2~",
+ [18] = "\033[18;2~",
+ [19] = "\033[19;2~",
+ [20] = "\033[20;2~",
+ [21] = "\033[21;2~",
+ [22] = "\033[23;2~",
+ [23] = "\033[24;2~",
+ [24] = "\033[1;5P",
+ [25] = "\033[1;5Q",
+ [26] = "\033[1;5R",
+ [27] = "\033[1;5S",
+ [28] = "\033[15;5~",
+ [29] = "\033[17;5~",
+ [30] = "\033[18;5~",
+ [31] = "\033[19;5~",
+ [32] = "\033[20;5~",
+ [33] = "\033[21;5~",
+ [34] = "\033[23;5~",
+ [35] = "\033[24;5~",
+ [36] = "\033[1;6P",
+ [37] = "\033[1;6Q",
+ [38] = "\033[1;6R",
+ [39] = "\033[1;6S",
+ [40] = "\033[15;6~",
+ [41] = "\033[17;6~",
+ [42] = "\033[18;6~",
+ [43] = "\033[19;6~",
+ [44] = "\033[20;6~",
+ [45] = "\033[21;6~",
+ [46] = "\033[23;6~",
+ [47] = "\033[24;6~",
+ [48] = "\033[1;3P",
+ [49] = "\033[1;3Q",
+ [50] = "\033[1;3R",
+ [51] = "\033[1;3S",
+ [52] = "\033[15;3~",
+ [53] = "\033[17;3~",
+ [54] = "\033[18;3~",
+ [55] = "\033[19;3~",
+ [56] = "\033[20;3~",
+ [57] = "\033[21;3~",
+ [58] = "\033[23;3~",
+ [59] = "\033[24;3~",
+ [60] = "\033[1;4P",
+ [61] = "\033[1;4Q",
+ [62] = "\033[1;4R",
+ },
+};
+
+static const TerminfoEntry xterm_256colour_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\n",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?12l\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033(B\033[m",
+ [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = "\033[?1l\033>",
+ [kTerm_keypad_xmit] = "\033[?1h\033=",
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "%?%p9%t\033(0%e\033(B%;\033[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m",
+ [kTerm_set_lr_margin] = "\033[?69h\033[%i%p1%d;%p2%ds",
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = "\033[2 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = "\033[9m",
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
+ [kTerm_reset_cursor_color] = "\033]112\a",
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {"\033OE", NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033OF", "\033[1;2F"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033OH", "\033[1;2H"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033OP",
+ [1] = "\033OQ",
+ [2] = "\033OR",
+ [3] = "\033OS",
+ [4] = "\033[15~",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[1;2P",
+ [13] = "\033[1;2Q",
+ [14] = "\033[1;2R",
+ [15] = "\033[1;2S",
+ [16] = "\033[15;2~",
+ [17] = "\033[17;2~",
+ [18] = "\033[18;2~",
+ [19] = "\033[19;2~",
+ [20] = "\033[20;2~",
+ [21] = "\033[21;2~",
+ [22] = "\033[23;2~",
+ [23] = "\033[24;2~",
+ [24] = "\033[1;5P",
+ [25] = "\033[1;5Q",
+ [26] = "\033[1;5R",
+ [27] = "\033[1;5S",
+ [28] = "\033[15;5~",
+ [29] = "\033[17;5~",
+ [30] = "\033[18;5~",
+ [31] = "\033[19;5~",
+ [32] = "\033[20;5~",
+ [33] = "\033[21;5~",
+ [34] = "\033[23;5~",
+ [35] = "\033[24;5~",
+ [36] = "\033[1;6P",
+ [37] = "\033[1;6Q",
+ [38] = "\033[1;6R",
+ [39] = "\033[1;6S",
+ [40] = "\033[15;6~",
+ [41] = "\033[17;6~",
+ [42] = "\033[18;6~",
+ [43] = "\033[19;6~",
+ [44] = "\033[20;6~",
+ [45] = "\033[21;6~",
+ [46] = "\033[23;6~",
+ [47] = "\033[24;6~",
+ [48] = "\033[1;3P",
+ [49] = "\033[1;3Q",
+ [50] = "\033[1;3R",
+ [51] = "\033[1;3S",
+ [52] = "\033[15;3~",
+ [53] = "\033[17;3~",
+ [54] = "\033[18;3~",
+ [55] = "\033[19;3~",
+ [56] = "\033[20;3~",
+ [57] = "\033[21;3~",
+ [58] = "\033[23;3~",
+ [59] = "\033[24;3~",
+ [60] = "\033[1;4P",
+ [61] = "\033[1;4Q",
+ [62] = "\033[1;4R",
+ },
+};
+
+static const TerminfoEntry cygwin_terminfo = {
+ .bce = false,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 8,
+ .lines = -1,
+ .columns = -1,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = NULL,
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\033[B",
+ [kTerm_cursor_invisible] = NULL,
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = NULL,
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\0337\033[?47h",
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[0;10m",
+ [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
+ [kTerm_from_status_line] = "\a",
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[4%p1%dm",
+ [kTerm_set_a_foreground] = "\033[3%p1%dm",
+ [kTerm_set_attributes] = "\033[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = "\033];",
+ [kTerm_reset_cursor_style] = NULL,
+ [kTerm_set_cursor_style] = NULL,
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {NULL, NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", NULL},
+ [kTermKey_end] = {"\033[4~", NULL},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", NULL},
+ [kTermKey_ic] = {"\033[2~", NULL},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {"^Z", NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[[A",
+ [1] = "\033[[B",
+ [2] = "\033[[C",
+ [3] = "\033[[D",
+ [4] = "\033[[E",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ },
+};
+
+static const TerminfoEntry win32con_terminfo = {
+ .bce = false,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 8,
+ .lines = -1,
+ .columns = -1,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = NULL,
+ [kTerm_clear_screen] = "\033[H\033[J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\033[B",
+ [kTerm_cursor_invisible] = NULL,
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = NULL,
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = NULL,
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\0337\033[?47h",
+ [kTerm_enter_italics_mode] = NULL,
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = NULL,
+ [kTerm_erase_chars] = NULL,
+ [kTerm_exit_attribute_mode] = "\033[0m",
+ [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = NULL,
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = NULL,
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = NULL,
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[4%p1%dm",
+ [kTerm_set_a_foreground] = "\033[3%p1%dm",
+ [kTerm_set_attributes] = "\033[0%?%p1%t;7%;%?%p3%t;7%;%?%p6%t;1%;m",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = "\033[0 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {NULL, NULL},
+ [kTermKey_btab] = {NULL, NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033[4~", "\033[4;2~"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", "\033[1;2~"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {"^Z", NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[[A",
+ [1] = "\033[[B",
+ [2] = "\033[[C",
+ [3] = "\033[[D",
+ [4] = "\033[[E",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ [20] = "\033[23$",
+ [21] = "\033[24$",
+ [22] = "\033[11\136",
+ [23] = "\033[12\136",
+ [24] = "\033[13\136",
+ [25] = "\033[14\136",
+ [26] = "\033[15\136",
+ [27] = "\033[17\136",
+ [28] = "\033[18\136",
+ [29] = "\033[19\136",
+ [30] = "\033[20\136",
+ [31] = "\033[21\136",
+ [32] = "\033[23\136",
+ [33] = "\033[24\136",
+ [34] = "\033[25\136",
+ [35] = "\033[26\136",
+ [36] = "\033[28\136",
+ [37] = "\033[29\136",
+ [38] = "\033[31\136",
+ [40] = "\033[32\136",
+ [41] = "\033[33\136",
+ [42] = "\033[34\136",
+ [43] = "\033[23@",
+ [44] = "\033[24@",
+ },
+};
+
+static const TerminfoEntry conemu_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\033[B",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[0m",
+ [kTerm_exit_ca_mode] = "\033[?1049l",
+ [kTerm_from_status_line] = NULL,
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[48;5;%p1%dm",
+ [kTerm_set_a_foreground] = "\033[38;5;%p1%dm",
+ [kTerm_set_attributes] = "\033[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = NULL,
+ [kTerm_reset_cursor_style] = "\033[2 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {"\033OE", NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033[4~", "\033[4;2~"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", "\033[1;2~"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[[A",
+ [1] = "\033[[B",
+ [2] = "\033[[C",
+ [3] = "\033[[D",
+ [4] = "\033[[E",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ [20] = "\033[23$",
+ [21] = "\033[24$",
+ [22] = "\033[11\136",
+ [23] = "\033[12\136",
+ [24] = "\033[13\136",
+ [25] = "\033[14\136",
+ [26] = "\033[15\136",
+ [27] = "\033[17\136",
+ [28] = "\033[18\136",
+ [29] = "\033[19\136",
+ [30] = "\033[20\136",
+ [31] = "\033[21\136",
+ [32] = "\033[23\136",
+ [33] = "\033[24\136",
+ [34] = "\033[25\136",
+ [35] = "\033[26\136",
+ [36] = "\033[28\136",
+ [37] = "\033[29\136",
+ [38] = "\033[31\136",
+ [39] = "\033[1;6S",
+ [40] = "\033[32\136",
+ [41] = "\033[33\136",
+ [42] = "\033[34\136",
+ [43] = "\033[23@",
+ [44] = "\033[24@",
+ },
+};
+
+static const TerminfoEntry vtpcon_terminfo = {
+ .bce = true,
+ .has_Tc_or_RGB = false,
+ .Su = false,
+ .max_colors = 0x100,
+ .lines = 24,
+ .columns = 80,
+ .defs = {
+ [kTerm_carriage_return] = "\r",
+ [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
+ [kTerm_clear_screen] = "\033[H\033[2J",
+ [kTerm_clr_eol] = "\033[K",
+ [kTerm_clr_eos] = "\033[J",
+ [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
+ [kTerm_cursor_down] = "\033[B",
+ [kTerm_cursor_invisible] = "\033[?25l",
+ [kTerm_cursor_left] = "\b",
+ [kTerm_cursor_home] = "\033[H",
+ [kTerm_cursor_normal] = "\033[?12l\033[?25h",
+ [kTerm_cursor_up] = "\033[A",
+ [kTerm_cursor_right] = "\033[C",
+ [kTerm_delete_line] = "\033[M",
+ [kTerm_enter_bold_mode] = "\033[1m",
+ [kTerm_enter_ca_mode] = "\033[?1049h",
+ [kTerm_enter_italics_mode] = "\033[3m",
+ [kTerm_enter_reverse_mode] = "\033[7m",
+ [kTerm_enter_standout_mode] = "\033[7m",
+ [kTerm_enter_underline_mode] = "\033[4m",
+ [kTerm_erase_chars] = "\033[%p1%dX",
+ [kTerm_exit_attribute_mode] = "\033[0m",
+ [kTerm_exit_ca_mode] = "\033[?1049l",
+ [kTerm_from_status_line] = "\a",
+ [kTerm_insert_line] = "\033[L",
+ [kTerm_keypad_local] = NULL,
+ [kTerm_keypad_xmit] = NULL,
+ [kTerm_parm_delete_line] = "\033[%p1%dM",
+ [kTerm_parm_down_cursor] = "\033[%p1%dB",
+ [kTerm_parm_insert_line] = "\033[%p1%dL",
+ [kTerm_parm_left_cursor] = "\033[%p1%dD",
+ [kTerm_parm_right_cursor] = "\033[%p1%dC",
+ [kTerm_parm_up_cursor] = "\033[%p1%dA",
+ [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
+ [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
+ [kTerm_set_attributes] = "\033[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m",
+ [kTerm_set_lr_margin] = NULL,
+ [kTerm_to_status_line] = "\033]0;",
+ [kTerm_reset_cursor_style] = "\033[2 q",
+ [kTerm_set_cursor_style] = "\033[%p1%d q",
+ [kTerm_enter_strikethrough_mode] = NULL,
+ [kTerm_set_rgb_foreground] = NULL,
+ [kTerm_set_rgb_background] = NULL,
+ [kTerm_set_cursor_color] = NULL,
+ [kTerm_reset_cursor_color] = NULL,
+ [kTerm_set_underline_style] = NULL,
+ },
+ .keys = {
+ [kTermKey_backspace] = {"\b", NULL},
+ [kTermKey_beg] = {"\033OE", NULL},
+ [kTermKey_btab] = {"\033[Z", NULL},
+ [kTermKey_clear] = {NULL, NULL},
+ [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
+ [kTermKey_end] = {"\033[4~", "\033[4;2~"},
+ [kTermKey_find] = {NULL, NULL},
+ [kTermKey_home] = {"\033[1~", "\033[1;2~"},
+ [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
+ [kTermKey_npage] = {"\033[6~", NULL},
+ [kTermKey_ppage] = {"\033[5~", NULL},
+ [kTermKey_select] = {NULL, NULL},
+ [kTermKey_suspend] = {NULL, NULL},
+ [kTermKey_undo] = {NULL, NULL},
+ },
+ .f_keys = {
+ // note: offset by one, f_keys[0] is F1 and so on
+ [0] = "\033[[A",
+ [1] = "\033[[B",
+ [2] = "\033[[C",
+ [3] = "\033[[D",
+ [4] = "\033[[E",
+ [5] = "\033[17~",
+ [6] = "\033[18~",
+ [7] = "\033[19~",
+ [8] = "\033[20~",
+ [9] = "\033[21~",
+ [10] = "\033[23~",
+ [11] = "\033[24~",
+ [12] = "\033[25~",
+ [13] = "\033[26~",
+ [14] = "\033[28~",
+ [15] = "\033[29~",
+ [16] = "\033[31~",
+ [17] = "\033[32~",
+ [18] = "\033[33~",
+ [19] = "\033[34~",
+ [20] = "\033[23$",
+ [21] = "\033[24$",
+ [22] = "\033[11\136",
+ [23] = "\033[12\136",
+ [24] = "\033[13\136",
+ [25] = "\033[14\136",
+ [26] = "\033[15\136",
+ [27] = "\033[17\136",
+ [28] = "\033[18\136",
+ [29] = "\033[19\136",
+ [30] = "\033[20\136",
+ [31] = "\033[21\136",
+ [32] = "\033[23\136",
+ [33] = "\033[24\136",
+ [34] = "\033[25\136",
+ [35] = "\033[26\136",
+ [36] = "\033[28\136",
+ [37] = "\033[29\136",
+ [38] = "\033[31\136",
+ [39] = "\033[1;6S",
+ [40] = "\033[32\136",
+ [41] = "\033[33\136",
+ [42] = "\033[34\136",
+ [43] = "\033[23@",
+ [44] = "\033[24@",
+ },
+};
+
+#define XLIST_TERMINFO_BUILTIN \
+ X(carriage_return) \
+ X(change_scroll_region) \
+ X(clear_screen) \
+ X(clr_eol) \
+ X(clr_eos) \
+ X(cursor_address) \
+ X(cursor_down) \
+ X(cursor_invisible) \
+ X(cursor_left) \
+ X(cursor_home) \
+ X(cursor_normal) \
+ X(cursor_up) \
+ X(cursor_right) \
+ X(delete_line) \
+ X(enter_bold_mode) \
+ X(enter_ca_mode) \
+ X(enter_italics_mode) \
+ X(enter_reverse_mode) \
+ X(enter_standout_mode) \
+ X(enter_underline_mode) \
+ X(erase_chars) \
+ X(exit_attribute_mode) \
+ X(exit_ca_mode) \
+ X(from_status_line) \
+ X(insert_line) \
+ X(keypad_local) \
+ X(keypad_xmit) \
+ X(parm_delete_line) \
+ X(parm_down_cursor) \
+ X(parm_insert_line) \
+ X(parm_left_cursor) \
+ X(parm_right_cursor) \
+ X(parm_up_cursor) \
+ X(set_a_background) \
+ X(set_a_foreground) \
+ X(set_attributes) \
+ X(set_lr_margin) \
+ X(to_status_line) \
+// end of list
+
+#define XLIST_TERMINFO_EXT \
+ X(reset_cursor_style, Se) \
+ X(set_cursor_style, Ss) \
+ X(enter_strikethrough_mode, smxx) \
+ X(set_rgb_foreground, setrgbf) \
+ X(set_rgb_background, setrgbb) \
+ X(set_cursor_color, Cs) \
+ X(reset_cursor_color, Cr) \
+ X(set_underline_style, Smulx) \
+// end of list
+
+#define XYLIST_TERMINFO_KEYS \
+ X(backspace) \
+ Y(beg) \
+ X(btab) \
+ X(clear) \
+ Y(dc) \
+ Y(end) \
+ Y(find) \
+ Y(home) \
+ Y(ic) \
+ X(npage) \
+ X(ppage) \
+ X(select) \
+ Y(suspend) \
+ Y(undo) \
+// end of list
+
+#define XLIST_TERMINFO_FKEYS \
+ X(f1) \
+ X(f2) \
+ X(f3) \
+ X(f4) \
+ X(f5) \
+ X(f6) \
+ X(f7) \
+ X(f8) \
+ X(f9) \
+ X(f10) \
+ X(f11) \
+ X(f12) \
+ X(f13) \
+ X(f14) \
+ X(f15) \
+ X(f16) \
+ X(f17) \
+ X(f18) \
+ X(f19) \
+ X(f20) \
+ X(f21) \
+ X(f22) \
+ X(f23) \
+ X(f24) \
+ X(f25) \
+ X(f26) \
+ X(f27) \
+ X(f28) \
+ X(f29) \
+ X(f30) \
+ X(f31) \
+ X(f32) \
+ X(f33) \
+ X(f34) \
+ X(f35) \
+ X(f36) \
+ X(f37) \
+ X(f38) \
+ X(f39) \
+ X(f40) \
+ X(f41) \
+ X(f42) \
+ X(f43) \
+ X(f44) \
+ X(f45) \
+ X(f46) \
+ X(f47) \
+ X(f48) \
+ X(f49) \
+ X(f50) \
+ X(f51) \
+ X(f52) \
+ X(f53) \
+ X(f54) \
+ X(f55) \
+ X(f56) \
+ X(f57) \
+ X(f58) \
+ X(f59) \
+ X(f60) \
+ X(f61) \
+ X(f62) \
+ X(f63) \
+// end of list
diff --git a/src/nvim/tui/terminfo_defs.h b/src/nvim/tui/terminfo_defs.h
@@ -1,914 +1,20 @@
-// uncrustify:off
-
-// Generated by src/gen/gen_terminfo.lua and ncurses 6.5.20240427
-
#pragma once
-#include "nvim/tui/terminfo.h"
-
-static const TerminfoEntry ansi_terminfo = {
- .bce = false,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 8,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = NULL,
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\033[B",
- [kTerm_cursor_invisible] = NULL,
- [kTerm_cursor_left] = "\033[D",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = NULL,
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = NULL,
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[0;10m",
- [kTerm_exit_ca_mode] = NULL,
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[4%p1%dm",
- [kTerm_set_a_foreground] = "\033[3%p1%dm",
- [kTerm_set_attributes] = "\033[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry interix_8colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 8,
- .lines = 25,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = NULL,
- [kTerm_clear_screen] = "\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = NULL,
- [kTerm_cursor_left] = "\033[D",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = NULL,
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[s\033[1b",
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[0m",
- [kTerm_exit_ca_mode] = "\033[2b\033[u\r\033[K",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[4%p1%dm",
- [kTerm_set_a_foreground] = "\033[3%p1%dm",
- [kTerm_set_attributes] = NULL,
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry iterm_256colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[m\017",
- [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
- [kTerm_from_status_line] = "\a",
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = "\033]2;",
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = "\033[9m",
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = "\033[4\072%p1%dm",
- },
-};
-
-static const TerminfoEntry linux_16colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 8,
- .lines = -1,
- .columns = -1,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l\033[?1c",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h\033[?0c",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = NULL,
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[m\017",
- [kTerm_exit_ca_mode] = NULL,
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[4%p1%dm",
- [kTerm_set_a_foreground] = "\033[3%p1%dm",
- [kTerm_set_attributes] = "\033[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry putty_256colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = -1,
- .columns = -1,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\033D",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h",
- [kTerm_cursor_up] = "\033M",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h",
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[m\017",
- [kTerm_exit_ca_mode] = "\033[?1049l",
- [kTerm_from_status_line] = "\a",
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = "\033]0;",
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = "\033[9m",
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry rxvt_256colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\0337\033[?47h",
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[m\017",
- [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033>",
- [kTerm_keypad_xmit] = "\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry screen_256colour_terminfo = {
- .bce = false,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[34h\033[?25h",
- [kTerm_cursor_up] = "\033M",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h",
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[3m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[m\017",
- [kTerm_exit_ca_mode] = "\033[?1049l",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry st_256colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[0m",
- [kTerm_exit_ca_mode] = "\033[?1049l",
- [kTerm_from_status_line] = "\a",
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "%?%p9%t\033(0%e\033(B%;\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = "\033]0;",
- [kTerm_reset_cursor_style] = "\033[2 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = "\033[9m",
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry tmux_256colour_terminfo = {
- .bce = false,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[34h\033[?25h",
- [kTerm_cursor_up] = "\033M",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[m\017",
- [kTerm_exit_ca_mode] = "\033[?1049l",
- [kTerm_from_status_line] = "\a",
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = "\033]0;",
- [kTerm_reset_cursor_style] = "\033[2 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = "\033[9m",
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
- [kTerm_reset_cursor_color] = "\033]112\a",
- [kTerm_set_underline_style] = "\033[4\072%p1%dm",
- },
-};
-
-static const TerminfoEntry vte_256colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[0m\017",
- [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t^N%e\017%;",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = "\033[1 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = "\033[9m",
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
- [kTerm_reset_cursor_color] = "\033]112\a",
- [kTerm_set_underline_style] = "\033[4\072%p1%dm",
- },
-};
-
-static const TerminfoEntry xterm_256colour_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\n",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?12l\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033(B\033[m",
- [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = "\033[?1l\033>",
- [kTerm_keypad_xmit] = "\033[?1h\033=",
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "%?%p9%t\033(0%e\033(B%;\033[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m",
- [kTerm_set_lr_margin] = "\033[?69h\033[%i%p1%d;%p2%ds",
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = "\033[2 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = "\033[9m",
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
- [kTerm_reset_cursor_color] = "\033]112\a",
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry cygwin_terminfo = {
- .bce = false,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 8,
- .lines = -1,
- .columns = -1,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = NULL,
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\033[B",
- [kTerm_cursor_invisible] = NULL,
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = NULL,
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\0337\033[?47h",
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[0;10m",
- [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
- [kTerm_from_status_line] = "\a",
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[4%p1%dm",
- [kTerm_set_a_foreground] = "\033[3%p1%dm",
- [kTerm_set_attributes] = "\033[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = "\033];",
- [kTerm_reset_cursor_style] = NULL,
- [kTerm_set_cursor_style] = NULL,
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry win32con_terminfo = {
- .bce = false,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 8,
- .lines = -1,
- .columns = -1,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = NULL,
- [kTerm_clear_screen] = "\033[H\033[J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\033[B",
- [kTerm_cursor_invisible] = NULL,
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = NULL,
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = NULL,
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\0337\033[?47h",
- [kTerm_enter_italics_mode] = NULL,
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = NULL,
- [kTerm_erase_chars] = NULL,
- [kTerm_exit_attribute_mode] = "\033[0m",
- [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = NULL,
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = NULL,
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = NULL,
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[4%p1%dm",
- [kTerm_set_a_foreground] = "\033[3%p1%dm",
- [kTerm_set_attributes] = "\033[0%?%p1%t;7%;%?%p3%t;7%;%?%p6%t;1%;m",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = "\033[0 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
-
-static const TerminfoEntry conemu_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\033[B",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[0m",
- [kTerm_exit_ca_mode] = "\033[?1049l",
- [kTerm_from_status_line] = NULL,
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[48;5;%p1%dm",
- [kTerm_set_a_foreground] = "\033[38;5;%p1%dm",
- [kTerm_set_attributes] = "\033[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = NULL,
- [kTerm_reset_cursor_style] = "\033[2 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
+#include <stdbool.h>
+#include <stddef.h>
-static const TerminfoEntry vtpcon_terminfo = {
- .bce = true,
- .has_Tc_or_RGB = false,
- .Su = false,
- .max_colors = 0x100,
- .lines = 24,
- .columns = 80,
- .defs = {
- [kTerm_carriage_return] = "\r",
- [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
- [kTerm_clear_screen] = "\033[H\033[2J",
- [kTerm_clr_eol] = "\033[K",
- [kTerm_clr_eos] = "\033[J",
- [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
- [kTerm_cursor_down] = "\033[B",
- [kTerm_cursor_invisible] = "\033[?25l",
- [kTerm_cursor_left] = "\b",
- [kTerm_cursor_home] = "\033[H",
- [kTerm_cursor_normal] = "\033[?12l\033[?25h",
- [kTerm_cursor_up] = "\033[A",
- [kTerm_cursor_right] = "\033[C",
- [kTerm_delete_line] = "\033[M",
- [kTerm_enter_bold_mode] = "\033[1m",
- [kTerm_enter_ca_mode] = "\033[?1049h",
- [kTerm_enter_italics_mode] = "\033[3m",
- [kTerm_enter_reverse_mode] = "\033[7m",
- [kTerm_enter_standout_mode] = "\033[7m",
- [kTerm_enter_underline_mode] = "\033[4m",
- [kTerm_erase_chars] = "\033[%p1%dX",
- [kTerm_exit_attribute_mode] = "\033[0m",
- [kTerm_exit_ca_mode] = "\033[?1049l",
- [kTerm_from_status_line] = "\a",
- [kTerm_insert_line] = "\033[L",
- [kTerm_keypad_local] = NULL,
- [kTerm_keypad_xmit] = NULL,
- [kTerm_parm_delete_line] = "\033[%p1%dM",
- [kTerm_parm_down_cursor] = "\033[%p1%dB",
- [kTerm_parm_insert_line] = "\033[%p1%dL",
- [kTerm_parm_left_cursor] = "\033[%p1%dD",
- [kTerm_parm_right_cursor] = "\033[%p1%dC",
- [kTerm_parm_up_cursor] = "\033[%p1%dA",
- [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
- [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
- [kTerm_set_attributes] = "\033[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m",
- [kTerm_set_lr_margin] = NULL,
- [kTerm_to_status_line] = "\033]0;",
- [kTerm_reset_cursor_style] = "\033[2 q",
- [kTerm_set_cursor_style] = "\033[%p1%d q",
- [kTerm_enter_strikethrough_mode] = NULL,
- [kTerm_set_rgb_foreground] = NULL,
- [kTerm_set_rgb_background] = NULL,
- [kTerm_set_cursor_color] = NULL,
- [kTerm_reset_cursor_color] = NULL,
- [kTerm_set_underline_style] = NULL,
- },
-};
+#include "nvim/tui/terminfo_enum_defs.h"
-#define XLIST_TERMINFO_BUILTIN \
- X(carriage_return) \
- X(change_scroll_region) \
- X(clear_screen) \
- X(clr_eol) \
- X(clr_eos) \
- X(cursor_address) \
- X(cursor_down) \
- X(cursor_invisible) \
- X(cursor_left) \
- X(cursor_home) \
- X(cursor_normal) \
- X(cursor_up) \
- X(cursor_right) \
- X(delete_line) \
- X(enter_bold_mode) \
- X(enter_ca_mode) \
- X(enter_italics_mode) \
- X(enter_reverse_mode) \
- X(enter_standout_mode) \
- X(enter_underline_mode) \
- X(erase_chars) \
- X(exit_attribute_mode) \
- X(exit_ca_mode) \
- X(from_status_line) \
- X(insert_line) \
- X(keypad_local) \
- X(keypad_xmit) \
- X(parm_delete_line) \
- X(parm_down_cursor) \
- X(parm_insert_line) \
- X(parm_left_cursor) \
- X(parm_right_cursor) \
- X(parm_up_cursor) \
- X(set_a_background) \
- X(set_a_foreground) \
- X(set_attributes) \
- X(set_lr_margin) \
- X(to_status_line) \
-// end of list
+typedef struct {
+ bool bce;
+ // these extended booleans indicate likely 24-color support
+ bool has_Tc_or_RGB;
+ bool Su;
-#define XLIST_TERMINFO_EXT \
- X(reset_cursor_style, Se) \
- X(set_cursor_style, Ss) \
- X(enter_strikethrough_mode, smxx) \
- X(set_rgb_foreground, setrgbf) \
- X(set_rgb_background, setrgbb) \
- X(set_cursor_color, Cs) \
- X(reset_cursor_color, Cr) \
- X(set_underline_style, Smulx) \
-// end of list
+ int max_colors;
+ int lines;
+ int columns;
+ const char *defs[kTermCount];
+ const char *keys[kTermKeyCount][2];
+ const char *f_keys[kTerminfoFuncKeyMax];
+} TerminfoEntry;
diff --git a/src/nvim/tui/terminfo_enum_defs.h b/src/nvim/tui/terminfo_enum_defs.h
@@ -52,3 +52,27 @@ typedef enum {
kTerm_set_underline_style,
kTermCount, // sentinel
} TerminfoDef;
+
+// TODO(bfredl): physical F-keys beyond F12 are uncommon. But terminfo
+// likes to represent chords with shift and/or ctrl and F keys as high
+// F-key numbers. The same chords can also be recognized by driver-csi.c
+// but will then be encoded as chords. We might actually prefer that but it is
+// potentially breaking change.
+#define kTerminfoFuncKeyMax 63
+typedef enum {
+ kTermKey_backspace,
+ kTermKey_beg,
+ kTermKey_btab,
+ kTermKey_clear,
+ kTermKey_dc,
+ kTermKey_end,
+ kTermKey_find,
+ kTermKey_home,
+ kTermKey_ic,
+ kTermKey_npage,
+ kTermKey_ppage,
+ kTermKey_select,
+ kTermKey_suspend,
+ kTermKey_undo,
+ kTermKeyCount,
+} TerminfoKey;
diff --git a/src/nvim/tui/termkey/driver-csi.c b/src/nvim/tui/termkey/driver-csi.c
@@ -683,7 +683,7 @@ static int register_keys(void)
return 1;
}
-void *new_driver_csi(TermKey *tk, const char *term)
+void *new_driver_csi(TermKey *tk, TerminfoEntry *term)
{
if (!keyinfo_initialised) {
if (!register_keys()) {
diff --git a/src/nvim/tui/termkey/driver-ti.c b/src/nvim/tui/termkey/driver-ti.c
@@ -4,10 +4,11 @@
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
-#include <unibilium.h>
#include <uv.h>
+#include "nvim/charset.h"
#include "nvim/memory.h"
+#include "nvim/tui/terminfo.h"
#include "nvim/tui/termkey/driver-ti.h"
#include "nvim/tui/termkey/termkey-internal.h"
#include "nvim/tui/termkey/termkey_defs.h"
@@ -25,77 +26,58 @@
#define MAX_FUNCNAME 9
static struct {
+ TerminfoKey ti_key;
const char *funcname;
TermKeyType type;
TermKeySym sym;
int mods;
} funcs[] = {
// THIS LIST MUST REMAIN SORTED!
- { "backspace", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_BACKSPACE, 0 },
- { "begin", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_BEGIN, 0 },
- { "beg", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_BEGIN, 0 },
- { "btab", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_TAB, TERMKEY_KEYMOD_SHIFT },
- { "cancel", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_CANCEL, 0 },
- { "clear", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_CLEAR, 0 },
- { "close", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_CLOSE, 0 },
- { "command", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_COMMAND, 0 },
- { "copy", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_COPY, 0 },
- { "dc", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_DELETE, 0 },
- { "down", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_DOWN, 0 },
- { "end", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_END, 0 },
- { "enter", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_ENTER, 0 },
- { "exit", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_EXIT, 0 },
- { "find", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_FIND, 0 },
- { "help", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_HELP, 0 },
- { "home", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_HOME, 0 },
- { "ic", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_INSERT, 0 },
- { "left", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_LEFT, 0 },
- { "mark", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_MARK, 0 },
- { "message", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_MESSAGE, 0 },
- { "move", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_MOVE, 0 },
- { "next", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEDOWN, 0 }, // Not quite, but it's the best we can do
- { "npage", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEDOWN, 0 },
- { "open", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_OPEN, 0 },
- { "options", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_OPTIONS, 0 },
- { "ppage", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEUP, 0 },
- { "previous", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEUP, 0 }, // Not quite, but it's the best we can do
- { "print", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PRINT, 0 },
- { "redo", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REDO, 0 },
- { "reference", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REFERENCE, 0 },
- { "refresh", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REFRESH, 0 },
- { "replace", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REPLACE, 0 },
- { "restart", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RESTART, 0 },
- { "resume", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RESUME, 0 },
- { "right", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RIGHT, 0 },
- { "save", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SAVE, 0 },
- { "select", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SELECT, 0 },
- { "suspend", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SUSPEND, 0 },
- { "undo", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_UNDO, 0 },
- { "up", TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_UP, 0 },
- { NULL, 0, 0, 0 },
+ // nvim note: entries commented out without further note are not recognized by nvim.
+#define KDEF(x) kTermKey_##x, #x
+ { KDEF(backspace), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_BACKSPACE, 0 },
+ { KDEF(beg), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_BEGIN, 0 },
+ { KDEF(btab), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_TAB, TERMKEY_KEYMOD_SHIFT },
+ // { KDEF(cancel), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_CANCEL, 0 },
+ { KDEF(clear), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_CLEAR, 0 },
+ // { KDEF(close), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_CLOSE, 0 },
+ // { KDEF(command), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_COMMAND, 0 },
+ // { KDEF(copy), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_COPY, 0 },
+ { KDEF(dc), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_DELETE, 0 },
+ // { KDEF(down), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_DOWN, 0 }, // redundant, driver-csi
+ { KDEF(end), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_END, 0 },
+ // { KDEF(enter), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_ENTER, 0 },
+ // { KDEF(exit), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_EXIT, 0 },
+ { KDEF(find), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_FIND, 0 },
+ // { KDEF(help), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_HELP, 0 },
+ { KDEF(home), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_HOME, 0 },
+ { KDEF(ic), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_INSERT, 0 },
+ // { KDEF(left), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_LEFT, 0 }, // redundant: driver-csi
+ // { KDEF(mark), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_MARK, 0 },
+ // { KDEF(message), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_MESSAGE, 0 },
+ // { KDEF(move), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_MOVE, 0 },
+ // { KDEF(next), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEDOWN, 0 }, // use "npage" right below
+ { KDEF(npage), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEDOWN, 0 },
+ // { KDEF(open), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_OPEN, 0 },
+ // { KDEF(options), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_OPTIONS, 0 },
+ { KDEF(ppage), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEUP, 0 },
+ // { KDEF(previous), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEUP, 0 }, // use "ppage" right above
+ // { KDEF(print), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PRINT, 0 },
+ // { KDEF(redo), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REDO, 0 },
+ // { KDEF(reference), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REFERENCE, 0 },
+ // { KDEF(refresh), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REFRESH, 0 },
+ // { KDEF(replace), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_REPLACE, 0 },
+ // { KDEF(restart), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RESTART, 0 },
+ // { KDEF(resume), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RESUME, 0 },
+ // { KDEF(right), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RIGHT, 0 }, // redundant, driver-csi
+ // { KDEF(save), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SAVE, 0 },
+ { KDEF(select), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SELECT, 0 },
+ { KDEF(suspend), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SUSPEND, 0 },
+ { KDEF(undo), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_UNDO, 0 },
+ // { KDEF(up), TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_UP, 0 }, // redundant, driver-ci
+ { 0, NULL, 0, 0, 0 },
};
-static enum unibi_string unibi_lookup_str(const char *name)
-{
- for (enum unibi_string ret = unibi_string_begin_ + 1; ret < unibi_string_end_; ret++) {
- if (streq(unibi_name_str(ret), name)) {
- return ret;
- }
- }
-
- return (enum unibi_string)-1;
-}
-
-static const char *unibi_get_str_by_name(const unibi_term *ut, const char *name)
-{
- enum unibi_string idx = unibi_lookup_str(name);
- if (idx == (enum unibi_string)-1) {
- return NULL;
- }
-
- return unibi_get_str(ut, idx);
-}
-
// To be efficient at lookups, we store the byte sequence => keyinfo mapping
// in a trie. This avoids a slow linear search through a flat list of
// sequences. Because it is likely most nodes will be very sparse, we optimise
@@ -226,12 +208,18 @@ static struct trie_node *compress_trie(struct trie_node *n)
return n;
}
-static bool try_load_terminfo_key(TermKeyTI *ti, const char *name, struct keyinfo *info)
+static bool try_load_terminfo_key(TermKeyTI *ti, bool fn_nr, int key, bool shift, const char *name,
+ struct keyinfo *info)
{
const char *value = NULL;
- if (ti->unibi) {
- value = unibi_get_str_by_name(ti->unibi, name);
+ if (ti->ti) {
+ if (!fn_nr) {
+ value = ti->ti->keys[key][shift ? 1 : 0];
+ } else {
+ assert(!shift);
+ value = ti->ti->f_keys[key];
+ }
}
if (ti->tk->ti_getstr_hook) {
@@ -253,8 +241,6 @@ static int load_terminfo(TermKeyTI *ti)
{
int i;
- unibi_term *unibi = ti->unibi;
-
ti->root = new_node_arr(0, 0xff);
if (!ti->root) {
return 0;
@@ -265,7 +251,7 @@ static int load_terminfo(TermKeyTI *ti)
char name[MAX_FUNCNAME + 5 + 1];
sprintf(name, "key_%s", funcs[i].funcname); // NOLINT(runtime/printf)
- if (!try_load_terminfo_key(ti, name, &(struct keyinfo){
+ if (!try_load_terminfo_key(ti, false, (int)funcs[i].ti_key, false, name, &(struct keyinfo){
.type = funcs[i].type,
.sym = funcs[i].sym,
.modifier_mask = funcs[i].mods,
@@ -276,7 +262,7 @@ static int load_terminfo(TermKeyTI *ti)
// Maybe it has a shifted version
sprintf(name, "key_s%s", funcs[i].funcname); // NOLINT(runtime/printf)
- try_load_terminfo_key(ti, name, &(struct keyinfo){
+ try_load_terminfo_key(ti, false, (int)funcs[i].ti_key, true, name, &(struct keyinfo){
.type = funcs[i].type,
.sym = funcs[i].sym,
.modifier_mask = funcs[i].mods | TERMKEY_KEYMOD_SHIFT,
@@ -285,10 +271,10 @@ static int load_terminfo(TermKeyTI *ti)
}
// Now the F<digit> keys
- for (i = 1; i < 255; i++) {
+ for (i = 1; i <= kTerminfoFuncKeyMax; i++) {
char name[9];
sprintf(name, "key_f%d", i); // NOLINT(runtime/printf)
- if (!try_load_terminfo_key(ti, name, &(struct keyinfo){
+ if (!try_load_terminfo_key(ti, true, (i - 1), false, name, &(struct keyinfo){
.type = TERMKEY_TYPE_FUNCTION,
.sym = i,
.modifier_mask = 0,
@@ -299,11 +285,12 @@ static int load_terminfo(TermKeyTI *ti)
}
// Finally mouse mode
- {
+ // This is overriden in nvim: we only want driver-csi mouse support
+ if (false) {
const char *value = NULL;
- if (ti->unibi) {
- value = unibi_get_str_by_name(ti->unibi, "key_mouse");
+ if (ti->ti) {
+ // value = ti->ti->keys[kTermKey_mouse][0];
}
if (ti->tk->ti_getstr_hook) {
@@ -321,8 +308,8 @@ static int load_terminfo(TermKeyTI *ti)
// Take copies of these terminfo strings, in case we build multiple termkey
// instances for multiple different termtypes, and it's different by the
// time we want to use it
- const char *keypad_xmit = unibi
- ? unibi_get_str(unibi, unibi_keypad_xmit)
+ const char *keypad_xmit = ti->ti
+ ? ti->ti->defs[kTerm_keypad_xmit]
: NULL;
if (keypad_xmit) {
@@ -331,8 +318,8 @@ static int load_terminfo(TermKeyTI *ti)
ti->start_string = NULL;
}
- const char *keypad_local = unibi
- ? unibi_get_str(unibi, unibi_keypad_local)
+ const char *keypad_local = ti->ti
+ ? ti->ti->defs[kTerm_keypad_local]
: NULL;
if (keypad_local) {
@@ -341,18 +328,12 @@ static int load_terminfo(TermKeyTI *ti)
ti->stop_string = NULL;
}
- if (unibi) {
- unibi_destroy(unibi);
- }
-
- ti->unibi = NULL;
-
ti->root = compress_trie(ti->root);
return 1;
}
-void *new_driver_ti(TermKey *tk, const char *term)
+void *new_driver_ti(TermKey *tk, TerminfoEntry *term)
{
TermKeyTI *ti = xmalloc(sizeof *ti);
@@ -361,13 +342,9 @@ void *new_driver_ti(TermKey *tk, const char *term)
ti->start_string = NULL;
ti->stop_string = NULL;
- ti->unibi = unibi_from_term(term);
- int saved_errno = errno;
- if (!ti->unibi && saved_errno != ENOENT) {
- xfree(ti);
- return NULL;
- }
- // ti->unibi may be NULL if errno == ENOENT. That means the terminal wasn't
+ ti->ti = term;
+
+ // ti->ti may be NULL because reasons. That means the terminal wasn't
// known. Lets keep going because if we get getstr hook that might invent
// new strings for us
@@ -472,10 +449,6 @@ void free_driver_ti(void *info)
xfree(ti->stop_string);
}
- if (ti->unibi) {
- unibi_destroy(ti->unibi);
- }
-
xfree(ti);
}
diff --git a/src/nvim/tui/termkey/termkey-internal.h b/src/nvim/tui/termkey/termkey-internal.h
@@ -20,7 +20,7 @@ typedef SSIZE_T ssize_t;
struct TermKeyDriver {
const char *name;
- void *(*new_driver)(TermKey *tk, const char *term);
+ void *(*new_driver)(TermKey *tk, TerminfoEntry *term);
void (*free_driver)(void *info);
int (*start_driver)(TermKey *tk, void *info);
int (*stop_driver)(TermKey *tk, void *info);
diff --git a/src/nvim/tui/termkey/termkey.c b/src/nvim/tui/termkey/termkey.c
@@ -357,7 +357,7 @@ static TermKey *termkey_alloc(void)
return tk;
}
-static int termkey_init(TermKey *tk, const char *term)
+static int termkey_init(TermKey *tk, TerminfoEntry *term)
{
tk->buffer = xmalloc(tk->buffsize);
tk->keynames = xmalloc(sizeof(tk->keynames[0]) * (size_t)tk->nkeynames);
@@ -433,7 +433,7 @@ abort_free_keynames:
return 0;
}
-TermKey *termkey_new_abstract(const char *term, int flags)
+TermKey *termkey_new_abstract(TerminfoEntry *term, int flags)
{
TermKey *tk = termkey_alloc();
if (!tk) {
diff --git a/src/nvim/tui/termkey/termkey_defs.h b/src/nvim/tui/termkey/termkey_defs.h
@@ -6,6 +6,7 @@
#include <uv.h>
#include "nvim/event/defs.h"
+#include "nvim/tui/terminfo_defs.h"
#include "nvim/tui/tui_defs.h"
#include "nvim/types_defs.h"
@@ -201,7 +202,7 @@ typedef enum {
typedef struct {
TermKey *tk;
- unibi_term *unibi; // only valid until first 'start' call
+ TerminfoEntry *ti; // not used after first 'start' call
struct trie_node *root;
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
@@ -171,7 +171,6 @@ void tui_start(TUIData **tui_p, int *width, int *height, char **term, bool *rgb)
kv_push(tui->attrs, HLATTRS_INIT);
tui->input.tk_ti_hook_fn = tui_tk_ti_getstr;
- tinput_init(&tui->input, &main_loop);
ugrid_init(&tui->grid);
tui_terminal_start(tui);
@@ -597,6 +596,7 @@ static void tui_terminal_start(TUIData *tui)
{
tui->print_attr_id = -1;
terminfo_start(tui);
+ tinput_init(&tui->input, &main_loop, &tui->ti);
tui_guess_size(tui);
tinput_start(&tui->input);
}
diff --git a/test/unit/termkey_spec.lua b/test/unit/termkey_spec.lua
@@ -69,7 +69,7 @@ local termkey = t.cimport(
describe('termkey', function()
itp('01base', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
t.neq(tk, nil)
t.eq(termkey.termkey_get_buffer_size(tk), 256)
@@ -85,7 +85,7 @@ describe('termkey', function()
end)
itp('02getkey', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
t.eq(termkey.termkey_get_buffer_remaining(tk), 256) -- buffer free initially 256
@@ -159,7 +159,7 @@ describe('termkey', function()
end)
itp('03utf8', function()
- local tk = termkey.termkey_new_abstract('vt100', termkey.TERMKEY_FLAG_UTF8)
+ local tk = termkey.termkey_new_abstract(nil, termkey.TERMKEY_FLAG_UTF8)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
termkey.termkey_push_bytes(tk, 'a', 1)
@@ -291,7 +291,7 @@ describe('termkey', function()
end)
itp('04flags', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
termkey.termkey_push_bytes(tk, ' ', 1)
@@ -316,7 +316,7 @@ describe('termkey', function()
end)
itp('06buffer', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
t.eq(termkey.termkey_get_buffer_remaining(tk), 256) -- buffer free initially 256
@@ -347,7 +347,7 @@ describe('termkey', function()
end
itp('10keyname', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local sym = termkey_keyname2sym(tk, 'SomeUnknownKey')
t.eq(sym, termkey.TERMKEY_SYM_UNKNOWN) -- keyname2sym SomeUnknownKey
@@ -374,7 +374,7 @@ describe('termkey', function()
end)
itp('11strfkey', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
---@type TermKeyKey
local key = t.ffi.new(
'TermKeyKey',
@@ -598,7 +598,7 @@ describe('termkey', function()
return key1.modifiers - key2.modifiers
end
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
---@type TermKeyKey
local key1 = t.ffi.new('TermKeyKey', {
type = termkey.TERMKEY_TYPE_UNICODE,
@@ -656,7 +656,7 @@ describe('termkey', function()
end)
itp('30mouse', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey', { type = -1 }) ---@type TermKeyKey
local ev = t.ffi.new('TermKeyMouseEvent[1]')
local button = t.ffi.new('int[1]')
@@ -809,7 +809,7 @@ describe('termkey', function()
end)
itp('31position', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
local line = t.ffi.new('int[1]')
local col = t.ffi.new('int[1]')
@@ -839,7 +839,7 @@ describe('termkey', function()
end)
itp('32modereport', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
local initial = t.ffi.new('int[1]')
local mode = t.ffi.new('int[1]')
@@ -879,7 +879,7 @@ describe('termkey', function()
end)
itp('38csi', function()
- local tk = termkey.termkey_new_abstract('vt100', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
local args = t.ffi.new('TermKeyCsiParam[16]')
local nargs = t.ffi.new('size_t[1]')
@@ -916,7 +916,7 @@ describe('termkey', function()
end)
itp('39dcs', function()
- local tk = termkey.termkey_new_abstract('xterm', 0)
+ local tk = termkey.termkey_new_abstract(nil, 0)
local key = t.ffi.new('TermKeyKey') ---@type TermKeyKey
-- 7bit DCS