neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

terminfo_builtin.h (65363B)


      1 // uncrustify:off
      2 
      3 // Generated by src/gen/gen_terminfo.lua and ncurses 6.5.20240427
      4 
      5 #pragma once
      6 
      7 #include "nvim/tui/terminfo_defs.h"
      8 
      9 static const TerminfoEntry ansi_terminfo = {
     10  .bce = false,
     11  .has_Tc_or_RGB = false,
     12  .Su = false,
     13  .max_colors = 8,
     14  .lines = 24,
     15  .columns = 80,
     16  .defs = {
     17    [kTerm_carriage_return] = "\r",
     18    [kTerm_change_scroll_region] = NULL,
     19    [kTerm_clear_screen] = "\033[H\033[J",
     20    [kTerm_clr_eol] = "\033[K",
     21    [kTerm_clr_eos] = "\033[J",
     22    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
     23    [kTerm_cursor_down] = "\033[B",
     24    [kTerm_cursor_invisible] = NULL,
     25    [kTerm_cursor_left] = "\033[D",
     26    [kTerm_cursor_home] = "\033[H",
     27    [kTerm_cursor_normal] = NULL,
     28    [kTerm_cursor_up] = "\033[A",
     29    [kTerm_cursor_right] = "\033[C",
     30    [kTerm_delete_line] = "\033[M",
     31    [kTerm_enter_blink_mode] = "\033[5m",
     32    [kTerm_enter_bold_mode] = "\033[1m",
     33    [kTerm_enter_ca_mode] = NULL,
     34    [kTerm_enter_dim_mode] = NULL,
     35    [kTerm_enter_italics_mode] = NULL,
     36    [kTerm_enter_reverse_mode] = "\033[7m",
     37    [kTerm_enter_secure_mode] = "\033[8m",
     38    [kTerm_enter_standout_mode] = "\033[7m",
     39    [kTerm_enter_underline_mode] = "\033[4m",
     40    [kTerm_erase_chars] = "\033[%p1%dX",
     41    [kTerm_exit_attribute_mode] = "\033[0;10m",
     42    [kTerm_exit_ca_mode] = NULL,
     43    [kTerm_from_status_line] = NULL,
     44    [kTerm_insert_line] = "\033[L",
     45    [kTerm_keypad_local] = NULL,
     46    [kTerm_keypad_xmit] = NULL,
     47    [kTerm_parm_delete_line] = "\033[%p1%dM",
     48    [kTerm_parm_down_cursor] = "\033[%p1%dB",
     49    [kTerm_parm_insert_line] = "\033[%p1%dL",
     50    [kTerm_parm_left_cursor] = "\033[%p1%dD",
     51    [kTerm_parm_right_cursor] = "\033[%p1%dC",
     52    [kTerm_parm_up_cursor] = "\033[%p1%dA",
     53    [kTerm_set_a_background] = "\033[4%p1%dm",
     54    [kTerm_set_a_foreground] = "\033[3%p1%dm",
     55    [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",
     56    [kTerm_set_lr_margin] = NULL,
     57    [kTerm_to_status_line] = NULL,
     58    [kTerm_reset_cursor_style] = NULL,
     59    [kTerm_set_cursor_style] = NULL,
     60    [kTerm_enter_strikethrough_mode] = NULL,
     61    [kTerm_set_rgb_foreground] = NULL,
     62    [kTerm_set_rgb_background] = NULL,
     63    [kTerm_set_cursor_color] = NULL,
     64    [kTerm_reset_cursor_color] = NULL,
     65    [kTerm_set_underline_style] = NULL,
     66  },
     67  .keys = {
     68    [kTermKey_backspace] = {"\b", NULL},
     69    [kTermKey_beg] = {NULL, NULL},
     70    [kTermKey_btab] = {"\033[Z", NULL},
     71    [kTermKey_clear] = {NULL, NULL},
     72    [kTermKey_dc] = {NULL, NULL},
     73    [kTermKey_end] = {NULL, NULL},
     74    [kTermKey_find] = {NULL, NULL},
     75    [kTermKey_home] = {"\033[H", NULL},
     76    [kTermKey_ic] = {"\033[L", NULL},
     77    [kTermKey_npage] = {NULL, NULL},
     78    [kTermKey_ppage] = {NULL, NULL},
     79    [kTermKey_select] = {NULL, NULL},
     80    [kTermKey_suspend] = {NULL, NULL},
     81    [kTermKey_undo] = {NULL, NULL},
     82  },
     83  .f_keys = {
     84    NULL,
     85  },
     86 };
     87 
     88 static const TerminfoEntry ghostty_terminfo = {
     89  .bce = true,
     90  .has_Tc_or_RGB = false,
     91  .Su = false,
     92  .max_colors = 0x100,
     93  .lines = 24,
     94  .columns = 80,
     95  .defs = {
     96    [kTerm_carriage_return] = "\r",
     97    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
     98    [kTerm_clear_screen] = "\033[H\033[2J",
     99    [kTerm_clr_eol] = "\033[K",
    100    [kTerm_clr_eos] = "\033[J",
    101    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    102    [kTerm_cursor_down] = "\n",
    103    [kTerm_cursor_invisible] = "\033[?25l",
    104    [kTerm_cursor_left] = "\b",
    105    [kTerm_cursor_home] = "\033[H",
    106    [kTerm_cursor_normal] = "\033[?12l\033[?25h",
    107    [kTerm_cursor_up] = "\033[A",
    108    [kTerm_cursor_right] = "\033[C",
    109    [kTerm_delete_line] = "\033[M",
    110    [kTerm_enter_blink_mode] = NULL,
    111    [kTerm_enter_bold_mode] = "\033[1m",
    112    [kTerm_enter_ca_mode] = "\033[?1049h",
    113    [kTerm_enter_dim_mode] = "\033[2m",
    114    [kTerm_enter_italics_mode] = "\033[3m",
    115    [kTerm_enter_reverse_mode] = "\033[7m",
    116    [kTerm_enter_secure_mode] = "\033[8m",
    117    [kTerm_enter_standout_mode] = "\033[7m",
    118    [kTerm_enter_underline_mode] = "\033[4m",
    119    [kTerm_erase_chars] = "\033[%p1%dX",
    120    [kTerm_exit_attribute_mode] = "\033(B\033[m",
    121    [kTerm_exit_ca_mode] = "\033[?1049l",
    122    [kTerm_from_status_line] = "\a",
    123    [kTerm_insert_line] = "\033[L",
    124    [kTerm_keypad_local] = "\033[?1l\033>",
    125    [kTerm_keypad_xmit] = "\033[?1h\033=",
    126    [kTerm_parm_delete_line] = "\033[%p1%dM",
    127    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    128    [kTerm_parm_insert_line] = "\033[%p1%dL",
    129    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    130    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    131    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    132    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
    133    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
    134    [kTerm_set_attributes] = "%?%p9%t\033(0%e\033(B%;\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p5%t;2%;%?%p7%t;8%;m",
    135    [kTerm_set_lr_margin] = "\033[?69h\033[%i%p1%d;%p2%ds",
    136    [kTerm_to_status_line] = "\033]2;",
    137    [kTerm_reset_cursor_style] = "\033[2 q",
    138    [kTerm_set_cursor_style] = "\033[%p1%d q",
    139    [kTerm_enter_strikethrough_mode] = "\033[9m",
    140    [kTerm_set_rgb_foreground] = NULL,
    141    [kTerm_set_rgb_background] = NULL,
    142    [kTerm_set_cursor_color] = NULL,
    143    [kTerm_reset_cursor_color] = NULL,
    144    [kTerm_set_underline_style] = "\033[4\072%p1%dm",
    145  },
    146  .keys = {
    147    [kTermKey_backspace] = {"\177", NULL},
    148    [kTermKey_beg] = {NULL, NULL},
    149    [kTermKey_btab] = {"\033[Z", NULL},
    150    [kTermKey_clear] = {NULL, NULL},
    151    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
    152    [kTermKey_end] = {"\033OF", "\033[1;2F"},
    153    [kTermKey_find] = {NULL, NULL},
    154    [kTermKey_home] = {"\033OH", "\033[1;2H"},
    155    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
    156    [kTermKey_npage] = {"\033[6~", NULL},
    157    [kTermKey_ppage] = {"\033[5~", NULL},
    158    [kTermKey_select] = {NULL, NULL},
    159    [kTermKey_suspend] = {NULL, NULL},
    160    [kTermKey_undo] = {NULL, NULL},
    161  },
    162  .f_keys = {
    163    // note: offset by one, f_keys[0] is F1 and so on
    164    [0] = "\033OP",
    165    [1] = "\033OQ",
    166    [2] = "\033OR",
    167    [3] = "\033OS",
    168    [4] = "\033[15~",
    169    [5] = "\033[17~",
    170    [6] = "\033[18~",
    171    [7] = "\033[19~",
    172    [8] = "\033[20~",
    173    [9] = "\033[21~",
    174    [10] = "\033[23~",
    175    [11] = "\033[24~",
    176    [12] = "\033[1;2P",
    177    [13] = "\033[1;2Q",
    178    [14] = "\033[1;2R",
    179    [15] = "\033[1;2S",
    180    [16] = "\033[15;2~",
    181    [17] = "\033[17;2~",
    182    [18] = "\033[18;2~",
    183    [19] = "\033[19;2~",
    184    [20] = "\033[20;2~",
    185    [21] = "\033[21;2~",
    186    [22] = "\033[23;2~",
    187    [23] = "\033[24;2~",
    188    [24] = "\033[1;5P",
    189    [25] = "\033[1;5Q",
    190    [26] = "\033[1;5R",
    191    [27] = "\033[1;5S",
    192    [28] = "\033[15;5~",
    193    [29] = "\033[17;5~",
    194    [30] = "\033[18;5~",
    195    [31] = "\033[19;5~",
    196    [32] = "\033[20;5~",
    197    [33] = "\033[21;5~",
    198    [34] = "\033[23;5~",
    199    [35] = "\033[24;5~",
    200    [36] = "\033[1;6P",
    201    [37] = "\033[1;6Q",
    202    [38] = "\033[1;6R",
    203    [39] = "\033[1;6S",
    204    [40] = "\033[15;6~",
    205    [41] = "\033[17;6~",
    206    [42] = "\033[18;6~",
    207    [43] = "\033[19;6~",
    208    [44] = "\033[20;6~",
    209    [45] = "\033[21;6~",
    210    [46] = "\033[23;6~",
    211    [47] = "\033[24;6~",
    212    [48] = "\033[1;3P",
    213    [49] = "\033[1;3Q",
    214    [50] = "\033[1;3R",
    215    [51] = "\033[1;3S",
    216    [52] = "\033[15;3~",
    217    [53] = "\033[17;3~",
    218    [54] = "\033[18;3~",
    219    [55] = "\033[19;3~",
    220    [56] = "\033[20;3~",
    221    [57] = "\033[21;3~",
    222    [58] = "\033[23;3~",
    223    [59] = "\033[24;3~",
    224    [60] = "\033[1;4P",
    225    [61] = "\033[1;4Q",
    226    [62] = "\033[1;4R",
    227  },
    228 };
    229 
    230 static const TerminfoEntry interix_8colour_terminfo = {
    231  .bce = true,
    232  .has_Tc_or_RGB = false,
    233  .Su = false,
    234  .max_colors = 8,
    235  .lines = 25,
    236  .columns = 80,
    237  .defs = {
    238    [kTerm_carriage_return] = "\r",
    239    [kTerm_change_scroll_region] = NULL,
    240    [kTerm_clear_screen] = "\033[2J",
    241    [kTerm_clr_eol] = "\033[K",
    242    [kTerm_clr_eos] = "\033[J",
    243    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    244    [kTerm_cursor_down] = "\n",
    245    [kTerm_cursor_invisible] = NULL,
    246    [kTerm_cursor_left] = "\033[D",
    247    [kTerm_cursor_home] = "\033[H",
    248    [kTerm_cursor_normal] = NULL,
    249    [kTerm_cursor_up] = "\033[A",
    250    [kTerm_cursor_right] = "\033[C",
    251    [kTerm_delete_line] = "\033[M",
    252    [kTerm_enter_blink_mode] = NULL,
    253    [kTerm_enter_bold_mode] = "\033[1m",
    254    [kTerm_enter_ca_mode] = "\033[s\033[1b",
    255    [kTerm_enter_dim_mode] = NULL,
    256    [kTerm_enter_italics_mode] = NULL,
    257    [kTerm_enter_reverse_mode] = "\033[7m",
    258    [kTerm_enter_secure_mode] = NULL,
    259    [kTerm_enter_standout_mode] = "\033[7m",
    260    [kTerm_enter_underline_mode] = "\033[4m",
    261    [kTerm_erase_chars] = NULL,
    262    [kTerm_exit_attribute_mode] = "\033[0m",
    263    [kTerm_exit_ca_mode] = "\033[2b\033[u\r\033[K",
    264    [kTerm_from_status_line] = NULL,
    265    [kTerm_insert_line] = "\033[L",
    266    [kTerm_keypad_local] = NULL,
    267    [kTerm_keypad_xmit] = NULL,
    268    [kTerm_parm_delete_line] = "\033[%p1%dM",
    269    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    270    [kTerm_parm_insert_line] = "\033[%p1%dL",
    271    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    272    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    273    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    274    [kTerm_set_a_background] = "\033[4%p1%dm",
    275    [kTerm_set_a_foreground] = "\033[3%p1%dm",
    276    [kTerm_set_attributes] = NULL,
    277    [kTerm_set_lr_margin] = NULL,
    278    [kTerm_to_status_line] = NULL,
    279    [kTerm_reset_cursor_style] = NULL,
    280    [kTerm_set_cursor_style] = NULL,
    281    [kTerm_enter_strikethrough_mode] = NULL,
    282    [kTerm_set_rgb_foreground] = NULL,
    283    [kTerm_set_rgb_background] = NULL,
    284    [kTerm_set_cursor_color] = NULL,
    285    [kTerm_reset_cursor_color] = NULL,
    286    [kTerm_set_underline_style] = NULL,
    287  },
    288  .keys = {
    289    [kTermKey_backspace] = {"\b", NULL},
    290    [kTermKey_beg] = {NULL, NULL},
    291    [kTermKey_btab] = {"\033[Z", NULL},
    292    [kTermKey_clear] = {NULL, NULL},
    293    [kTermKey_dc] = {"\177", NULL},
    294    [kTermKey_end] = {"\033[U", NULL},
    295    [kTermKey_find] = {NULL, NULL},
    296    [kTermKey_home] = {"\033[H", NULL},
    297    [kTermKey_ic] = {"\033[L", NULL},
    298    [kTermKey_npage] = {"\033[T", NULL},
    299    [kTermKey_ppage] = {"\033[S", NULL},
    300    [kTermKey_select] = {NULL, NULL},
    301    [kTermKey_suspend] = {NULL, NULL},
    302    [kTermKey_undo] = {NULL, NULL},
    303  },
    304  .f_keys = {
    305    // note: offset by one, f_keys[0] is F1 and so on
    306    [0] = "\033F1",
    307    [1] = "\033F2",
    308    [2] = "\033F3",
    309    [3] = "\033F4",
    310    [4] = "\033F5",
    311    [5] = "\033F6",
    312    [6] = "\033F7",
    313    [7] = "\033F8",
    314    [8] = "\033F9",
    315    [9] = "\033FA",
    316    [10] = "\033FB",
    317    [11] = "\033FC",
    318    [12] = "\033FD",
    319    [13] = "\033FE",
    320    [14] = "\033FF",
    321    [15] = "\033FG",
    322    [16] = "\033FH",
    323    [17] = "\033FI",
    324    [18] = "\033FJ",
    325    [19] = "\033FK",
    326    [20] = "\033FL",
    327    [21] = "\033FM",
    328    [22] = "\033FN",
    329    [23] = "\033FO",
    330    [24] = "\033FP",
    331    [25] = "\033FQ",
    332    [26] = "\033FR",
    333    [27] = "\033FS",
    334    [28] = "\033FT",
    335    [29] = "\033FU",
    336    [30] = "\033FV",
    337    [31] = "\033FW",
    338    [32] = "\033FX",
    339    [33] = "\033FY",
    340    [34] = "\033FZ",
    341    [35] = "\033Fa",
    342    [36] = "\033Fb",
    343    [37] = "\033Fc",
    344    [38] = "\033Fd",
    345    [39] = "\033Fe",
    346    [40] = "\033Ff",
    347    [41] = "\033Fg",
    348    [42] = "\033Fh",
    349    [43] = "\033Fi",
    350    [44] = "\033Fj",
    351    [45] = "\033Fk",
    352    [46] = "\033Fm",
    353    [47] = "\033Fn",
    354    [48] = "\033Fo",
    355    [49] = "\033Fp",
    356    [50] = "\033Fq",
    357    [51] = "\033Fr",
    358    [52] = "\033Fs",
    359    [53] = "\033Ft",
    360    [54] = "\033Fu",
    361    [55] = "\033Fv",
    362    [56] = "\033Fw",
    363    [57] = "\033Fx",
    364    [58] = "\033Fy",
    365    [59] = "\033Fz",
    366  },
    367 };
    368 
    369 static const TerminfoEntry iterm_256colour_terminfo = {
    370  .bce = true,
    371  .has_Tc_or_RGB = false,
    372  .Su = false,
    373  .max_colors = 0x100,
    374  .lines = 24,
    375  .columns = 80,
    376  .defs = {
    377    [kTerm_carriage_return] = "\r",
    378    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
    379    [kTerm_clear_screen] = "\033[H\033[J",
    380    [kTerm_clr_eol] = "\033[K",
    381    [kTerm_clr_eos] = "\033[J",
    382    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    383    [kTerm_cursor_down] = "\n",
    384    [kTerm_cursor_invisible] = "\033[?25l",
    385    [kTerm_cursor_left] = "\b",
    386    [kTerm_cursor_home] = "\033[H",
    387    [kTerm_cursor_normal] = "\033[?25h",
    388    [kTerm_cursor_up] = "\033[A",
    389    [kTerm_cursor_right] = "\033[C",
    390    [kTerm_delete_line] = "\033[M",
    391    [kTerm_enter_blink_mode] = "\033[5m",
    392    [kTerm_enter_bold_mode] = "\033[1m",
    393    [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
    394    [kTerm_enter_dim_mode] = "\033[2m",
    395    [kTerm_enter_italics_mode] = "\033[3m",
    396    [kTerm_enter_reverse_mode] = "\033[7m",
    397    [kTerm_enter_secure_mode] = NULL,
    398    [kTerm_enter_standout_mode] = "\033[7m",
    399    [kTerm_enter_underline_mode] = "\033[4m",
    400    [kTerm_erase_chars] = NULL,
    401    [kTerm_exit_attribute_mode] = "\033[m\017",
    402    [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
    403    [kTerm_from_status_line] = "\a",
    404    [kTerm_insert_line] = "\033[L",
    405    [kTerm_keypad_local] = "\033[?1l\033>",
    406    [kTerm_keypad_xmit] = "\033[?1h\033=",
    407    [kTerm_parm_delete_line] = "\033[%p1%dM",
    408    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    409    [kTerm_parm_insert_line] = "\033[%p1%dL",
    410    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    411    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    412    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    413    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
    414    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
    415    [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%;",
    416    [kTerm_set_lr_margin] = NULL,
    417    [kTerm_to_status_line] = "\033]2;",
    418    [kTerm_reset_cursor_style] = NULL,
    419    [kTerm_set_cursor_style] = NULL,
    420    [kTerm_enter_strikethrough_mode] = "\033[9m",
    421    [kTerm_set_rgb_foreground] = NULL,
    422    [kTerm_set_rgb_background] = NULL,
    423    [kTerm_set_cursor_color] = NULL,
    424    [kTerm_reset_cursor_color] = NULL,
    425    [kTerm_set_underline_style] = "\033[4\072%p1%dm",
    426  },
    427  .keys = {
    428    [kTermKey_backspace] = {"\177", NULL},
    429    [kTermKey_beg] = {NULL, NULL},
    430    [kTermKey_btab] = {"\033[Z", NULL},
    431    [kTermKey_clear] = {NULL, NULL},
    432    [kTermKey_dc] = {"\033[3~", NULL},
    433    [kTermKey_end] = {"\033OF", "\033[1;2F"},
    434    [kTermKey_find] = {NULL, NULL},
    435    [kTermKey_home] = {"\033OH", "\033[1;2H"},
    436    [kTermKey_ic] = {NULL, NULL},
    437    [kTermKey_npage] = {"\033[6~", NULL},
    438    [kTermKey_ppage] = {"\033[5~", NULL},
    439    [kTermKey_select] = {NULL, NULL},
    440    [kTermKey_suspend] = {NULL, NULL},
    441    [kTermKey_undo] = {NULL, NULL},
    442  },
    443  .f_keys = {
    444    // note: offset by one, f_keys[0] is F1 and so on
    445    [0] = "\033OP",
    446    [1] = "\033OQ",
    447    [2] = "\033OR",
    448    [3] = "\033OS",
    449    [4] = "\033[15~",
    450    [5] = "\033[17~",
    451    [6] = "\033[18~",
    452    [7] = "\033[19~",
    453    [8] = "\033[20~",
    454    [9] = "\033[21~",
    455    [10] = "\033[23~",
    456    [11] = "\033[24~",
    457    [12] = "\033[1;2P",
    458    [13] = "\033[1;2Q",
    459    [14] = "\033[1;2R",
    460    [15] = "\033[1;2S",
    461    [16] = "\033[15;2~",
    462    [17] = "\033[17;2~",
    463    [18] = "\033[18;2~",
    464    [19] = "\033[19;2~",
    465    [20] = "\033[20;2~",
    466    [21] = "\033[21;2~",
    467    [22] = "\033[23;2~",
    468    [23] = "\033[24;2~",
    469  },
    470 };
    471 
    472 static const TerminfoEntry linux_16colour_terminfo = {
    473  .bce = true,
    474  .has_Tc_or_RGB = false,
    475  .Su = false,
    476  .max_colors = 8,
    477  .lines = -1,
    478  .columns = -1,
    479  .defs = {
    480    [kTerm_carriage_return] = "\r",
    481    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
    482    [kTerm_clear_screen] = "\033[H\033[J",
    483    [kTerm_clr_eol] = "\033[K",
    484    [kTerm_clr_eos] = "\033[J",
    485    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    486    [kTerm_cursor_down] = "\n",
    487    [kTerm_cursor_invisible] = "\033[?25l\033[?1c",
    488    [kTerm_cursor_left] = "\b",
    489    [kTerm_cursor_home] = "\033[H",
    490    [kTerm_cursor_normal] = "\033[?25h\033[?0c",
    491    [kTerm_cursor_up] = "\033[A",
    492    [kTerm_cursor_right] = "\033[C",
    493    [kTerm_delete_line] = "\033[M",
    494    [kTerm_enter_blink_mode] = "\033[5m",
    495    [kTerm_enter_bold_mode] = "\033[1m",
    496    [kTerm_enter_ca_mode] = NULL,
    497    [kTerm_enter_dim_mode] = "\033[2m",
    498    [kTerm_enter_italics_mode] = NULL,
    499    [kTerm_enter_reverse_mode] = "\033[7m",
    500    [kTerm_enter_secure_mode] = NULL,
    501    [kTerm_enter_standout_mode] = "\033[7m",
    502    [kTerm_enter_underline_mode] = "\033[4m",
    503    [kTerm_erase_chars] = "\033[%p1%dX",
    504    [kTerm_exit_attribute_mode] = "\033[m\017",
    505    [kTerm_exit_ca_mode] = NULL,
    506    [kTerm_from_status_line] = NULL,
    507    [kTerm_insert_line] = "\033[L",
    508    [kTerm_keypad_local] = NULL,
    509    [kTerm_keypad_xmit] = NULL,
    510    [kTerm_parm_delete_line] = "\033[%p1%dM",
    511    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    512    [kTerm_parm_insert_line] = "\033[%p1%dL",
    513    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    514    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    515    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    516    [kTerm_set_a_background] = "\033[4%p1%dm",
    517    [kTerm_set_a_foreground] = "\033[3%p1%dm",
    518    [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%;",
    519    [kTerm_set_lr_margin] = NULL,
    520    [kTerm_to_status_line] = NULL,
    521    [kTerm_reset_cursor_style] = NULL,
    522    [kTerm_set_cursor_style] = NULL,
    523    [kTerm_enter_strikethrough_mode] = NULL,
    524    [kTerm_set_rgb_foreground] = NULL,
    525    [kTerm_set_rgb_background] = NULL,
    526    [kTerm_set_cursor_color] = NULL,
    527    [kTerm_reset_cursor_color] = NULL,
    528    [kTerm_set_underline_style] = NULL,
    529  },
    530  .keys = {
    531    [kTermKey_backspace] = {"\177", NULL},
    532    [kTermKey_beg] = {NULL, NULL},
    533    [kTermKey_btab] = {"\033^I", NULL},
    534    [kTermKey_clear] = {NULL, NULL},
    535    [kTermKey_dc] = {"\033[3~", NULL},
    536    [kTermKey_end] = {"\033[4~", NULL},
    537    [kTermKey_find] = {NULL, NULL},
    538    [kTermKey_home] = {"\033[1~", NULL},
    539    [kTermKey_ic] = {"\033[2~", NULL},
    540    [kTermKey_npage] = {"\033[6~", NULL},
    541    [kTermKey_ppage] = {"\033[5~", NULL},
    542    [kTermKey_select] = {NULL, NULL},
    543    [kTermKey_suspend] = {"^Z", NULL},
    544    [kTermKey_undo] = {NULL, NULL},
    545  },
    546  .f_keys = {
    547    // note: offset by one, f_keys[0] is F1 and so on
    548    [0] = "\033[[A",
    549    [1] = "\033[[B",
    550    [2] = "\033[[C",
    551    [3] = "\033[[D",
    552    [4] = "\033[[E",
    553    [5] = "\033[17~",
    554    [6] = "\033[18~",
    555    [7] = "\033[19~",
    556    [8] = "\033[20~",
    557    [9] = "\033[21~",
    558    [10] = "\033[23~",
    559    [11] = "\033[24~",
    560    [12] = "\033[25~",
    561    [13] = "\033[26~",
    562    [14] = "\033[28~",
    563    [15] = "\033[29~",
    564    [16] = "\033[31~",
    565    [17] = "\033[32~",
    566    [18] = "\033[33~",
    567    [19] = "\033[34~",
    568  },
    569 };
    570 
    571 static const TerminfoEntry putty_256colour_terminfo = {
    572  .bce = true,
    573  .has_Tc_or_RGB = false,
    574  .Su = false,
    575  .max_colors = 0x100,
    576  .lines = -1,
    577  .columns = -1,
    578  .defs = {
    579    [kTerm_carriage_return] = "\r",
    580    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
    581    [kTerm_clear_screen] = "\033[H\033[J",
    582    [kTerm_clr_eol] = "\033[K",
    583    [kTerm_clr_eos] = "\033[J",
    584    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    585    [kTerm_cursor_down] = "\033D",
    586    [kTerm_cursor_invisible] = "\033[?25l",
    587    [kTerm_cursor_left] = "\b",
    588    [kTerm_cursor_home] = "\033[H",
    589    [kTerm_cursor_normal] = "\033[?25h",
    590    [kTerm_cursor_up] = "\033M",
    591    [kTerm_cursor_right] = "\033[C",
    592    [kTerm_delete_line] = "\033[M",
    593    [kTerm_enter_blink_mode] = "\033[5m",
    594    [kTerm_enter_bold_mode] = "\033[1m",
    595    [kTerm_enter_ca_mode] = "\033[?1049h",
    596    [kTerm_enter_dim_mode] = NULL,
    597    [kTerm_enter_italics_mode] = NULL,
    598    [kTerm_enter_reverse_mode] = "\033[7m",
    599    [kTerm_enter_secure_mode] = NULL,
    600    [kTerm_enter_standout_mode] = "\033[7m",
    601    [kTerm_enter_underline_mode] = "\033[4m",
    602    [kTerm_erase_chars] = "\033[%p1%dX",
    603    [kTerm_exit_attribute_mode] = "\033[m\017",
    604    [kTerm_exit_ca_mode] = "\033[?1049l",
    605    [kTerm_from_status_line] = "\a",
    606    [kTerm_insert_line] = "\033[L",
    607    [kTerm_keypad_local] = "\033[?1l\033>",
    608    [kTerm_keypad_xmit] = "\033[?1h\033=",
    609    [kTerm_parm_delete_line] = "\033[%p1%dM",
    610    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    611    [kTerm_parm_insert_line] = "\033[%p1%dL",
    612    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    613    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    614    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    615    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
    616    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
    617    [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%;",
    618    [kTerm_set_lr_margin] = NULL,
    619    [kTerm_to_status_line] = "\033]0;",
    620    [kTerm_reset_cursor_style] = NULL,
    621    [kTerm_set_cursor_style] = NULL,
    622    [kTerm_enter_strikethrough_mode] = "\033[9m",
    623    [kTerm_set_rgb_foreground] = NULL,
    624    [kTerm_set_rgb_background] = NULL,
    625    [kTerm_set_cursor_color] = NULL,
    626    [kTerm_reset_cursor_color] = NULL,
    627    [kTerm_set_underline_style] = NULL,
    628  },
    629  .keys = {
    630    [kTermKey_backspace] = {"\177", NULL},
    631    [kTermKey_beg] = {NULL, NULL},
    632    [kTermKey_btab] = {"\033[Z", NULL},
    633    [kTermKey_clear] = {NULL, NULL},
    634    [kTermKey_dc] = {"\033[3~", NULL},
    635    [kTermKey_end] = {"\033[4~", NULL},
    636    [kTermKey_find] = {NULL, NULL},
    637    [kTermKey_home] = {"\033[1~", NULL},
    638    [kTermKey_ic] = {"\033[2~", NULL},
    639    [kTermKey_npage] = {"\033[6~", NULL},
    640    [kTermKey_ppage] = {"\033[5~", NULL},
    641    [kTermKey_select] = {NULL, NULL},
    642    [kTermKey_suspend] = {"^Z", NULL},
    643    [kTermKey_undo] = {NULL, NULL},
    644  },
    645  .f_keys = {
    646    // note: offset by one, f_keys[0] is F1 and so on
    647    [0] = "\033[11~",
    648    [1] = "\033[12~",
    649    [2] = "\033[13~",
    650    [3] = "\033[14~",
    651    [4] = "\033[15~",
    652    [5] = "\033[17~",
    653    [6] = "\033[18~",
    654    [7] = "\033[19~",
    655    [8] = "\033[20~",
    656    [9] = "\033[21~",
    657    [10] = "\033[23~",
    658    [11] = "\033[24~",
    659    [12] = "\033[25~",
    660    [13] = "\033[26~",
    661    [14] = "\033[28~",
    662    [15] = "\033[29~",
    663    [16] = "\033[31~",
    664    [17] = "\033[32~",
    665    [18] = "\033[33~",
    666    [19] = "\033[34~",
    667  },
    668 };
    669 
    670 static const TerminfoEntry rxvt_256colour_terminfo = {
    671  .bce = true,
    672  .has_Tc_or_RGB = false,
    673  .Su = false,
    674  .max_colors = 0x100,
    675  .lines = 24,
    676  .columns = 80,
    677  .defs = {
    678    [kTerm_carriage_return] = "\r",
    679    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
    680    [kTerm_clear_screen] = "\033[H\033[2J",
    681    [kTerm_clr_eol] = "\033[K",
    682    [kTerm_clr_eos] = "\033[J",
    683    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    684    [kTerm_cursor_down] = "\n",
    685    [kTerm_cursor_invisible] = "\033[?25l",
    686    [kTerm_cursor_left] = "\b",
    687    [kTerm_cursor_home] = "\033[H",
    688    [kTerm_cursor_normal] = "\033[?25h",
    689    [kTerm_cursor_up] = "\033[A",
    690    [kTerm_cursor_right] = "\033[C",
    691    [kTerm_delete_line] = "\033[M",
    692    [kTerm_enter_blink_mode] = "\033[5m",
    693    [kTerm_enter_bold_mode] = "\033[1m",
    694    [kTerm_enter_ca_mode] = "\0337\033[?47h",
    695    [kTerm_enter_dim_mode] = NULL,
    696    [kTerm_enter_italics_mode] = NULL,
    697    [kTerm_enter_reverse_mode] = "\033[7m",
    698    [kTerm_enter_secure_mode] = NULL,
    699    [kTerm_enter_standout_mode] = "\033[7m",
    700    [kTerm_enter_underline_mode] = "\033[4m",
    701    [kTerm_erase_chars] = NULL,
    702    [kTerm_exit_attribute_mode] = "\033[m\017",
    703    [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
    704    [kTerm_from_status_line] = NULL,
    705    [kTerm_insert_line] = "\033[L",
    706    [kTerm_keypad_local] = "\033>",
    707    [kTerm_keypad_xmit] = "\033=",
    708    [kTerm_parm_delete_line] = "\033[%p1%dM",
    709    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    710    [kTerm_parm_insert_line] = "\033[%p1%dL",
    711    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    712    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    713    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    714    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
    715    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
    716    [kTerm_set_attributes] = "\033[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e\017%;",
    717    [kTerm_set_lr_margin] = NULL,
    718    [kTerm_to_status_line] = NULL,
    719    [kTerm_reset_cursor_style] = NULL,
    720    [kTerm_set_cursor_style] = NULL,
    721    [kTerm_enter_strikethrough_mode] = NULL,
    722    [kTerm_set_rgb_foreground] = NULL,
    723    [kTerm_set_rgb_background] = NULL,
    724    [kTerm_set_cursor_color] = NULL,
    725    [kTerm_reset_cursor_color] = NULL,
    726    [kTerm_set_underline_style] = NULL,
    727  },
    728  .keys = {
    729    [kTermKey_backspace] = {"\b", NULL},
    730    [kTermKey_beg] = {NULL, NULL},
    731    [kTermKey_btab] = {"\033[Z", NULL},
    732    [kTermKey_clear] = {NULL, NULL},
    733    [kTermKey_dc] = {"\033[3~", "\033[3$"},
    734    [kTermKey_end] = {"\033[8~", "\033[8$"},
    735    [kTermKey_find] = {"\033[1~", NULL},
    736    [kTermKey_home] = {"\033[7~", "\033[7$"},
    737    [kTermKey_ic] = {"\033[2~", "\033[2$"},
    738    [kTermKey_npage] = {"\033[6~", NULL},
    739    [kTermKey_ppage] = {"\033[5~", NULL},
    740    [kTermKey_select] = {"\033[4~", NULL},
    741    [kTermKey_suspend] = {NULL, NULL},
    742    [kTermKey_undo] = {NULL, NULL},
    743  },
    744  .f_keys = {
    745    // note: offset by one, f_keys[0] is F1 and so on
    746    [0] = "\033[11~",
    747    [1] = "\033[12~",
    748    [2] = "\033[13~",
    749    [3] = "\033[14~",
    750    [4] = "\033[15~",
    751    [5] = "\033[17~",
    752    [6] = "\033[18~",
    753    [7] = "\033[19~",
    754    [8] = "\033[20~",
    755    [9] = "\033[21~",
    756    [10] = "\033[23~",
    757    [11] = "\033[24~",
    758    [12] = "\033[25~",
    759    [13] = "\033[26~",
    760    [14] = "\033[28~",
    761    [15] = "\033[29~",
    762    [16] = "\033[31~",
    763    [17] = "\033[32~",
    764    [18] = "\033[33~",
    765    [19] = "\033[34~",
    766    [20] = "\033[23$",
    767    [21] = "\033[24$",
    768    [22] = "\033[11\136",
    769    [23] = "\033[12\136",
    770    [24] = "\033[13\136",
    771    [25] = "\033[14\136",
    772    [26] = "\033[15\136",
    773    [27] = "\033[17\136",
    774    [28] = "\033[18\136",
    775    [29] = "\033[19\136",
    776    [30] = "\033[20\136",
    777    [31] = "\033[21\136",
    778    [32] = "\033[23\136",
    779    [33] = "\033[24\136",
    780    [34] = "\033[25\136",
    781    [35] = "\033[26\136",
    782    [36] = "\033[28\136",
    783    [37] = "\033[29\136",
    784    [38] = "\033[31\136",
    785    [39] = "\033[32\136",
    786    [40] = "\033[33\136",
    787    [41] = "\033[34\136",
    788    [42] = "\033[23@",
    789    [43] = "\033[24@",
    790  },
    791 };
    792 
    793 static const TerminfoEntry screen_256colour_terminfo = {
    794  .bce = false,
    795  .has_Tc_or_RGB = false,
    796  .Su = false,
    797  .max_colors = 0x100,
    798  .lines = 24,
    799  .columns = 80,
    800  .defs = {
    801    [kTerm_carriage_return] = "\r",
    802    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
    803    [kTerm_clear_screen] = "\033[H\033[J",
    804    [kTerm_clr_eol] = "\033[K",
    805    [kTerm_clr_eos] = "\033[J",
    806    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    807    [kTerm_cursor_down] = "\n",
    808    [kTerm_cursor_invisible] = "\033[?25l",
    809    [kTerm_cursor_left] = "\b",
    810    [kTerm_cursor_home] = "\033[H",
    811    [kTerm_cursor_normal] = "\033[34h\033[?25h",
    812    [kTerm_cursor_up] = "\033M",
    813    [kTerm_cursor_right] = "\033[C",
    814    [kTerm_delete_line] = "\033[M",
    815    [kTerm_enter_blink_mode] = "\033[5m",
    816    [kTerm_enter_bold_mode] = "\033[1m",
    817    [kTerm_enter_ca_mode] = "\033[?1049h",
    818    [kTerm_enter_dim_mode] = "\033[2m",
    819    [kTerm_enter_italics_mode] = NULL,
    820    [kTerm_enter_reverse_mode] = "\033[7m",
    821    [kTerm_enter_secure_mode] = NULL,
    822    [kTerm_enter_standout_mode] = "\033[3m",
    823    [kTerm_enter_underline_mode] = "\033[4m",
    824    [kTerm_erase_chars] = NULL,
    825    [kTerm_exit_attribute_mode] = "\033[m\017",
    826    [kTerm_exit_ca_mode] = "\033[?1049l",
    827    [kTerm_from_status_line] = NULL,
    828    [kTerm_insert_line] = "\033[L",
    829    [kTerm_keypad_local] = "\033[?1l\033>",
    830    [kTerm_keypad_xmit] = "\033[?1h\033=",
    831    [kTerm_parm_delete_line] = "\033[%p1%dM",
    832    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    833    [kTerm_parm_insert_line] = "\033[%p1%dL",
    834    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    835    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    836    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    837    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
    838    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
    839    [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%;",
    840    [kTerm_set_lr_margin] = NULL,
    841    [kTerm_to_status_line] = NULL,
    842    [kTerm_reset_cursor_style] = NULL,
    843    [kTerm_set_cursor_style] = NULL,
    844    [kTerm_enter_strikethrough_mode] = NULL,
    845    [kTerm_set_rgb_foreground] = NULL,
    846    [kTerm_set_rgb_background] = NULL,
    847    [kTerm_set_cursor_color] = NULL,
    848    [kTerm_reset_cursor_color] = NULL,
    849    [kTerm_set_underline_style] = NULL,
    850  },
    851  .keys = {
    852    [kTermKey_backspace] = {"\177", NULL},
    853    [kTermKey_beg] = {NULL, NULL},
    854    [kTermKey_btab] = {"\033[Z", NULL},
    855    [kTermKey_clear] = {NULL, NULL},
    856    [kTermKey_dc] = {"\033[3~", NULL},
    857    [kTermKey_end] = {"\033[4~", NULL},
    858    [kTermKey_find] = {NULL, NULL},
    859    [kTermKey_home] = {"\033[1~", NULL},
    860    [kTermKey_ic] = {"\033[2~", NULL},
    861    [kTermKey_npage] = {"\033[6~", NULL},
    862    [kTermKey_ppage] = {"\033[5~", NULL},
    863    [kTermKey_select] = {NULL, NULL},
    864    [kTermKey_suspend] = {NULL, NULL},
    865    [kTermKey_undo] = {NULL, NULL},
    866  },
    867  .f_keys = {
    868    // note: offset by one, f_keys[0] is F1 and so on
    869    [0] = "\033OP",
    870    [1] = "\033OQ",
    871    [2] = "\033OR",
    872    [3] = "\033OS",
    873    [4] = "\033[15~",
    874    [5] = "\033[17~",
    875    [6] = "\033[18~",
    876    [7] = "\033[19~",
    877    [8] = "\033[20~",
    878    [9] = "\033[21~",
    879    [10] = "\033[23~",
    880    [11] = "\033[24~",
    881  },
    882 };
    883 
    884 static const TerminfoEntry st_256colour_terminfo = {
    885  .bce = true,
    886  .has_Tc_or_RGB = false,
    887  .Su = false,
    888  .max_colors = 0x100,
    889  .lines = 24,
    890  .columns = 80,
    891  .defs = {
    892    [kTerm_carriage_return] = "\r",
    893    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
    894    [kTerm_clear_screen] = "\033[H\033[2J",
    895    [kTerm_clr_eol] = "\033[K",
    896    [kTerm_clr_eos] = "\033[J",
    897    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
    898    [kTerm_cursor_down] = "\n",
    899    [kTerm_cursor_invisible] = "\033[?25l",
    900    [kTerm_cursor_left] = "\b",
    901    [kTerm_cursor_home] = "\033[H",
    902    [kTerm_cursor_normal] = "\033[?25h",
    903    [kTerm_cursor_up] = "\033[A",
    904    [kTerm_cursor_right] = "\033[C",
    905    [kTerm_delete_line] = "\033[M",
    906    [kTerm_enter_blink_mode] = "\033[5m",
    907    [kTerm_enter_bold_mode] = "\033[1m",
    908    [kTerm_enter_ca_mode] = "\033[?1049h",
    909    [kTerm_enter_dim_mode] = "\033[2m",
    910    [kTerm_enter_italics_mode] = "\033[3m",
    911    [kTerm_enter_reverse_mode] = "\033[7m",
    912    [kTerm_enter_secure_mode] = "\033[8m",
    913    [kTerm_enter_standout_mode] = "\033[7m",
    914    [kTerm_enter_underline_mode] = "\033[4m",
    915    [kTerm_erase_chars] = "\033[%p1%dX",
    916    [kTerm_exit_attribute_mode] = "\033[0m",
    917    [kTerm_exit_ca_mode] = "\033[?1049l",
    918    [kTerm_from_status_line] = "\a",
    919    [kTerm_insert_line] = "\033[L",
    920    [kTerm_keypad_local] = "\033[?1l\033>",
    921    [kTerm_keypad_xmit] = "\033[?1h\033=",
    922    [kTerm_parm_delete_line] = "\033[%p1%dM",
    923    [kTerm_parm_down_cursor] = "\033[%p1%dB",
    924    [kTerm_parm_insert_line] = "\033[%p1%dL",
    925    [kTerm_parm_left_cursor] = "\033[%p1%dD",
    926    [kTerm_parm_right_cursor] = "\033[%p1%dC",
    927    [kTerm_parm_up_cursor] = "\033[%p1%dA",
    928    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
    929    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
    930    [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",
    931    [kTerm_set_lr_margin] = NULL,
    932    [kTerm_to_status_line] = "\033]0;",
    933    [kTerm_reset_cursor_style] = "\033[2 q",
    934    [kTerm_set_cursor_style] = "\033[%p1%d q",
    935    [kTerm_enter_strikethrough_mode] = "\033[9m",
    936    [kTerm_set_rgb_foreground] = NULL,
    937    [kTerm_set_rgb_background] = NULL,
    938    [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
    939    [kTerm_reset_cursor_color] = NULL,
    940    [kTerm_set_underline_style] = NULL,
    941  },
    942  .keys = {
    943    [kTermKey_backspace] = {"\177", NULL},
    944    [kTermKey_beg] = {NULL, NULL},
    945    [kTermKey_btab] = {NULL, NULL},
    946    [kTermKey_clear] = {"\033[3;5~", NULL},
    947    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
    948    [kTermKey_end] = {"\033[4~", "\033[1;2F"},
    949    [kTermKey_find] = {NULL, NULL},
    950    [kTermKey_home] = {"\033[1~", "\033[1;2H"},
    951    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
    952    [kTermKey_npage] = {"\033[6~", NULL},
    953    [kTermKey_ppage] = {"\033[5~", NULL},
    954    [kTermKey_select] = {NULL, NULL},
    955    [kTermKey_suspend] = {NULL, NULL},
    956    [kTermKey_undo] = {NULL, NULL},
    957  },
    958  .f_keys = {
    959    // note: offset by one, f_keys[0] is F1 and so on
    960    [0] = "\033OP",
    961    [1] = "\033OQ",
    962    [2] = "\033OR",
    963    [3] = "\033OS",
    964    [4] = "\033[15~",
    965    [5] = "\033[17~",
    966    [6] = "\033[18~",
    967    [7] = "\033[19~",
    968    [8] = "\033[20~",
    969    [9] = "\033[21~",
    970    [10] = "\033[23~",
    971    [11] = "\033[24~",
    972    [12] = "\033[1;2P",
    973    [13] = "\033[1;2Q",
    974    [14] = "\033[1;2R",
    975    [15] = "\033[1;2S",
    976    [16] = "\033[15;2~",
    977    [17] = "\033[17;2~",
    978    [18] = "\033[18;2~",
    979    [19] = "\033[19;2~",
    980    [20] = "\033[20;2~",
    981    [21] = "\033[21;2~",
    982    [22] = "\033[23;2~",
    983    [23] = "\033[24;2~",
    984    [24] = "\033[1;5P",
    985    [25] = "\033[1;5Q",
    986    [26] = "\033[1;5R",
    987    [27] = "\033[1;5S",
    988    [28] = "\033[15;5~",
    989    [29] = "\033[17;5~",
    990    [30] = "\033[18;5~",
    991    [31] = "\033[19;5~",
    992    [32] = "\033[20;5~",
    993    [33] = "\033[21;5~",
    994    [34] = "\033[23;5~",
    995    [35] = "\033[24;5~",
    996    [36] = "\033[1;6P",
    997    [37] = "\033[1;6Q",
    998    [38] = "\033[1;6R",
    999    [39] = "\033[1;6S",
   1000    [40] = "\033[15;6~",
   1001    [41] = "\033[17;6~",
   1002    [42] = "\033[18;6~",
   1003    [43] = "\033[19;6~",
   1004    [44] = "\033[20;6~",
   1005    [45] = "\033[21;6~",
   1006    [46] = "\033[23;6~",
   1007    [47] = "\033[24;6~",
   1008    [48] = "\033[1;3P",
   1009    [49] = "\033[1;3Q",
   1010    [50] = "\033[1;3R",
   1011    [51] = "\033[1;3S",
   1012    [52] = "\033[15;3~",
   1013    [53] = "\033[17;3~",
   1014    [54] = "\033[18;3~",
   1015    [55] = "\033[19;3~",
   1016    [56] = "\033[20;3~",
   1017    [57] = "\033[21;3~",
   1018    [58] = "\033[23;3~",
   1019    [59] = "\033[24;3~",
   1020    [60] = "\033[1;4P",
   1021    [61] = "\033[1;4Q",
   1022    [62] = "\033[1;4R",
   1023  },
   1024 };
   1025 
   1026 static const TerminfoEntry tmux_256colour_terminfo = {
   1027  .bce = false,
   1028  .has_Tc_or_RGB = false,
   1029  .Su = false,
   1030  .max_colors = 0x100,
   1031  .lines = 24,
   1032  .columns = 80,
   1033  .defs = {
   1034    [kTerm_carriage_return] = "\r",
   1035    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
   1036    [kTerm_clear_screen] = "\033[H\033[J",
   1037    [kTerm_clr_eol] = "\033[K",
   1038    [kTerm_clr_eos] = "\033[J",
   1039    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1040    [kTerm_cursor_down] = "\n",
   1041    [kTerm_cursor_invisible] = "\033[?25l",
   1042    [kTerm_cursor_left] = "\b",
   1043    [kTerm_cursor_home] = "\033[H",
   1044    [kTerm_cursor_normal] = "\033[34h\033[?25h",
   1045    [kTerm_cursor_up] = "\033M",
   1046    [kTerm_cursor_right] = "\033[C",
   1047    [kTerm_delete_line] = "\033[M",
   1048    [kTerm_enter_blink_mode] = "\033[5m",
   1049    [kTerm_enter_bold_mode] = "\033[1m",
   1050    [kTerm_enter_ca_mode] = "\033[?1049h",
   1051    [kTerm_enter_dim_mode] = "\033[2m",
   1052    [kTerm_enter_italics_mode] = "\033[3m",
   1053    [kTerm_enter_reverse_mode] = "\033[7m",
   1054    [kTerm_enter_secure_mode] = "\033[8m",
   1055    [kTerm_enter_standout_mode] = "\033[7m",
   1056    [kTerm_enter_underline_mode] = "\033[4m",
   1057    [kTerm_erase_chars] = NULL,
   1058    [kTerm_exit_attribute_mode] = "\033[m\017",
   1059    [kTerm_exit_ca_mode] = "\033[?1049l",
   1060    [kTerm_from_status_line] = "\a",
   1061    [kTerm_insert_line] = "\033[L",
   1062    [kTerm_keypad_local] = "\033[?1l\033>",
   1063    [kTerm_keypad_xmit] = "\033[?1h\033=",
   1064    [kTerm_parm_delete_line] = "\033[%p1%dM",
   1065    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1066    [kTerm_parm_insert_line] = "\033[%p1%dL",
   1067    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1068    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1069    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1070    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
   1071    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
   1072    [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%;",
   1073    [kTerm_set_lr_margin] = NULL,
   1074    [kTerm_to_status_line] = "\033]0;",
   1075    [kTerm_reset_cursor_style] = "\033[2 q",
   1076    [kTerm_set_cursor_style] = "\033[%p1%d q",
   1077    [kTerm_enter_strikethrough_mode] = "\033[9m",
   1078    [kTerm_set_rgb_foreground] = NULL,
   1079    [kTerm_set_rgb_background] = NULL,
   1080    [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
   1081    [kTerm_reset_cursor_color] = "\033]112\a",
   1082    [kTerm_set_underline_style] = "\033[4\072%p1%dm",
   1083  },
   1084  .keys = {
   1085    [kTermKey_backspace] = {"\177", NULL},
   1086    [kTermKey_beg] = {NULL, NULL},
   1087    [kTermKey_btab] = {"\033[Z", NULL},
   1088    [kTermKey_clear] = {NULL, NULL},
   1089    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
   1090    [kTermKey_end] = {"\033[4~", "\033[1;2F"},
   1091    [kTermKey_find] = {NULL, NULL},
   1092    [kTermKey_home] = {"\033[1~", "\033[1;2H"},
   1093    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
   1094    [kTermKey_npage] = {"\033[6~", NULL},
   1095    [kTermKey_ppage] = {"\033[5~", NULL},
   1096    [kTermKey_select] = {NULL, NULL},
   1097    [kTermKey_suspend] = {NULL, NULL},
   1098    [kTermKey_undo] = {NULL, NULL},
   1099  },
   1100  .f_keys = {
   1101    // note: offset by one, f_keys[0] is F1 and so on
   1102    [0] = "\033OP",
   1103    [1] = "\033OQ",
   1104    [2] = "\033OR",
   1105    [3] = "\033OS",
   1106    [4] = "\033[15~",
   1107    [5] = "\033[17~",
   1108    [6] = "\033[18~",
   1109    [7] = "\033[19~",
   1110    [8] = "\033[20~",
   1111    [9] = "\033[21~",
   1112    [10] = "\033[23~",
   1113    [11] = "\033[24~",
   1114    [12] = "\033[1;2P",
   1115    [13] = "\033[1;2Q",
   1116    [14] = "\033[1;2R",
   1117    [15] = "\033[1;2S",
   1118    [16] = "\033[15;2~",
   1119    [17] = "\033[17;2~",
   1120    [18] = "\033[18;2~",
   1121    [19] = "\033[19;2~",
   1122    [20] = "\033[20;2~",
   1123    [21] = "\033[21;2~",
   1124    [22] = "\033[23;2~",
   1125    [23] = "\033[24;2~",
   1126    [24] = "\033[1;5P",
   1127    [25] = "\033[1;5Q",
   1128    [26] = "\033[1;5R",
   1129    [27] = "\033[1;5S",
   1130    [28] = "\033[15;5~",
   1131    [29] = "\033[17;5~",
   1132    [30] = "\033[18;5~",
   1133    [31] = "\033[19;5~",
   1134    [32] = "\033[20;5~",
   1135    [33] = "\033[21;5~",
   1136    [34] = "\033[23;5~",
   1137    [35] = "\033[24;5~",
   1138    [36] = "\033[1;6P",
   1139    [37] = "\033[1;6Q",
   1140    [38] = "\033[1;6R",
   1141    [39] = "\033[1;6S",
   1142    [40] = "\033[15;6~",
   1143    [41] = "\033[17;6~",
   1144    [42] = "\033[18;6~",
   1145    [43] = "\033[19;6~",
   1146    [44] = "\033[20;6~",
   1147    [45] = "\033[21;6~",
   1148    [46] = "\033[23;6~",
   1149    [47] = "\033[24;6~",
   1150    [48] = "\033[1;3P",
   1151    [49] = "\033[1;3Q",
   1152    [50] = "\033[1;3R",
   1153    [51] = "\033[1;3S",
   1154    [52] = "\033[15;3~",
   1155    [53] = "\033[17;3~",
   1156    [54] = "\033[18;3~",
   1157    [55] = "\033[19;3~",
   1158    [56] = "\033[20;3~",
   1159    [57] = "\033[21;3~",
   1160    [58] = "\033[23;3~",
   1161    [59] = "\033[24;3~",
   1162    [60] = "\033[1;4P",
   1163    [61] = "\033[1;4Q",
   1164    [62] = "\033[1;4R",
   1165  },
   1166 };
   1167 
   1168 static const TerminfoEntry vte_256colour_terminfo = {
   1169  .bce = true,
   1170  .has_Tc_or_RGB = false,
   1171  .Su = false,
   1172  .max_colors = 0x100,
   1173  .lines = 24,
   1174  .columns = 80,
   1175  .defs = {
   1176    [kTerm_carriage_return] = "\r",
   1177    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
   1178    [kTerm_clear_screen] = "\033[H\033[2J",
   1179    [kTerm_clr_eol] = "\033[K",
   1180    [kTerm_clr_eos] = "\033[J",
   1181    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1182    [kTerm_cursor_down] = "\n",
   1183    [kTerm_cursor_invisible] = "\033[?25l",
   1184    [kTerm_cursor_left] = "\b",
   1185    [kTerm_cursor_home] = "\033[H",
   1186    [kTerm_cursor_normal] = "\033[?25h",
   1187    [kTerm_cursor_up] = "\033[A",
   1188    [kTerm_cursor_right] = "\033[C",
   1189    [kTerm_delete_line] = "\033[M",
   1190    [kTerm_enter_blink_mode] = "\033[5m",
   1191    [kTerm_enter_bold_mode] = "\033[1m",
   1192    [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
   1193    [kTerm_enter_dim_mode] = "\033[2m",
   1194    [kTerm_enter_italics_mode] = "\033[3m",
   1195    [kTerm_enter_reverse_mode] = "\033[7m",
   1196    [kTerm_enter_secure_mode] = "\033[8m",
   1197    [kTerm_enter_standout_mode] = "\033[7m",
   1198    [kTerm_enter_underline_mode] = "\033[4m",
   1199    [kTerm_erase_chars] = "\033[%p1%dX",
   1200    [kTerm_exit_attribute_mode] = "\033[0m\017",
   1201    [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
   1202    [kTerm_from_status_line] = NULL,
   1203    [kTerm_insert_line] = "\033[L",
   1204    [kTerm_keypad_local] = "\033[?1l\033>",
   1205    [kTerm_keypad_xmit] = "\033[?1h\033=",
   1206    [kTerm_parm_delete_line] = "\033[%p1%dM",
   1207    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1208    [kTerm_parm_insert_line] = "\033[%p1%dL",
   1209    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1210    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1211    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1212    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
   1213    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
   1214    [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%;",
   1215    [kTerm_set_lr_margin] = NULL,
   1216    [kTerm_to_status_line] = NULL,
   1217    [kTerm_reset_cursor_style] = "\033[1 q",
   1218    [kTerm_set_cursor_style] = "\033[%p1%d q",
   1219    [kTerm_enter_strikethrough_mode] = "\033[9m",
   1220    [kTerm_set_rgb_foreground] = NULL,
   1221    [kTerm_set_rgb_background] = NULL,
   1222    [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
   1223    [kTerm_reset_cursor_color] = "\033]112\a",
   1224    [kTerm_set_underline_style] = "\033[4\072%p1%dm",
   1225  },
   1226  .keys = {
   1227    [kTermKey_backspace] = {"\177", NULL},
   1228    [kTermKey_beg] = {NULL, NULL},
   1229    [kTermKey_btab] = {"\033[Z", NULL},
   1230    [kTermKey_clear] = {NULL, NULL},
   1231    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
   1232    [kTermKey_end] = {"\033OF", "\033[1;2F"},
   1233    [kTermKey_find] = {"\033[1~", NULL},
   1234    [kTermKey_home] = {"\033OH", "\033[1;2H"},
   1235    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
   1236    [kTermKey_npage] = {"\033[6~", NULL},
   1237    [kTermKey_ppage] = {"\033[5~", NULL},
   1238    [kTermKey_select] = {"\033[4~", NULL},
   1239    [kTermKey_suspend] = {NULL, NULL},
   1240    [kTermKey_undo] = {NULL, NULL},
   1241  },
   1242  .f_keys = {
   1243    // note: offset by one, f_keys[0] is F1 and so on
   1244    [0] = "\033OP",
   1245    [1] = "\033OQ",
   1246    [2] = "\033OR",
   1247    [3] = "\033OS",
   1248    [4] = "\033[15~",
   1249    [5] = "\033[17~",
   1250    [6] = "\033[18~",
   1251    [7] = "\033[19~",
   1252    [8] = "\033[20~",
   1253    [9] = "\033[21~",
   1254    [10] = "\033[23~",
   1255    [11] = "\033[24~",
   1256    [12] = "\033[1;2P",
   1257    [13] = "\033[1;2Q",
   1258    [14] = "\033[1;2R",
   1259    [15] = "\033[1;2S",
   1260    [16] = "\033[15;2~",
   1261    [17] = "\033[17;2~",
   1262    [18] = "\033[18;2~",
   1263    [19] = "\033[19;2~",
   1264    [20] = "\033[20;2~",
   1265    [21] = "\033[21;2~",
   1266    [22] = "\033[23;2~",
   1267    [23] = "\033[24;2~",
   1268    [24] = "\033[1;5P",
   1269    [25] = "\033[1;5Q",
   1270    [26] = "\033[1;5R",
   1271    [27] = "\033[1;5S",
   1272    [28] = "\033[15;5~",
   1273    [29] = "\033[17;5~",
   1274    [30] = "\033[18;5~",
   1275    [31] = "\033[19;5~",
   1276    [32] = "\033[20;5~",
   1277    [33] = "\033[21;5~",
   1278    [34] = "\033[23;5~",
   1279    [35] = "\033[24;5~",
   1280    [36] = "\033[1;6P",
   1281    [37] = "\033[1;6Q",
   1282    [38] = "\033[1;6R",
   1283    [39] = "\033[1;6S",
   1284    [40] = "\033[15;6~",
   1285    [41] = "\033[17;6~",
   1286    [42] = "\033[18;6~",
   1287    [43] = "\033[19;6~",
   1288    [44] = "\033[20;6~",
   1289    [45] = "\033[21;6~",
   1290    [46] = "\033[23;6~",
   1291    [47] = "\033[24;6~",
   1292    [48] = "\033[1;3P",
   1293    [49] = "\033[1;3Q",
   1294    [50] = "\033[1;3R",
   1295    [51] = "\033[1;3S",
   1296    [52] = "\033[15;3~",
   1297    [53] = "\033[17;3~",
   1298    [54] = "\033[18;3~",
   1299    [55] = "\033[19;3~",
   1300    [56] = "\033[20;3~",
   1301    [57] = "\033[21;3~",
   1302    [58] = "\033[23;3~",
   1303    [59] = "\033[24;3~",
   1304    [60] = "\033[1;4P",
   1305    [61] = "\033[1;4Q",
   1306    [62] = "\033[1;4R",
   1307  },
   1308 };
   1309 
   1310 static const TerminfoEntry xterm_256colour_terminfo = {
   1311  .bce = true,
   1312  .has_Tc_or_RGB = false,
   1313  .Su = false,
   1314  .max_colors = 0x100,
   1315  .lines = 24,
   1316  .columns = 80,
   1317  .defs = {
   1318    [kTerm_carriage_return] = "\r",
   1319    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
   1320    [kTerm_clear_screen] = "\033[H\033[2J",
   1321    [kTerm_clr_eol] = "\033[K",
   1322    [kTerm_clr_eos] = "\033[J",
   1323    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1324    [kTerm_cursor_down] = "\n",
   1325    [kTerm_cursor_invisible] = "\033[?25l",
   1326    [kTerm_cursor_left] = "\b",
   1327    [kTerm_cursor_home] = "\033[H",
   1328    [kTerm_cursor_normal] = "\033[?12l\033[?25h",
   1329    [kTerm_cursor_up] = "\033[A",
   1330    [kTerm_cursor_right] = "\033[C",
   1331    [kTerm_delete_line] = "\033[M",
   1332    [kTerm_enter_blink_mode] = "\033[5m",
   1333    [kTerm_enter_bold_mode] = "\033[1m",
   1334    [kTerm_enter_ca_mode] = "\033[?1049h\033[22;0;0t",
   1335    [kTerm_enter_dim_mode] = "\033[2m",
   1336    [kTerm_enter_italics_mode] = "\033[3m",
   1337    [kTerm_enter_reverse_mode] = "\033[7m",
   1338    [kTerm_enter_secure_mode] = "\033[8m",
   1339    [kTerm_enter_standout_mode] = "\033[7m",
   1340    [kTerm_enter_underline_mode] = "\033[4m",
   1341    [kTerm_erase_chars] = "\033[%p1%dX",
   1342    [kTerm_exit_attribute_mode] = "\033(B\033[m",
   1343    [kTerm_exit_ca_mode] = "\033[?1049l\033[23;0;0t",
   1344    [kTerm_from_status_line] = NULL,
   1345    [kTerm_insert_line] = "\033[L",
   1346    [kTerm_keypad_local] = "\033[?1l\033>",
   1347    [kTerm_keypad_xmit] = "\033[?1h\033=",
   1348    [kTerm_parm_delete_line] = "\033[%p1%dM",
   1349    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1350    [kTerm_parm_insert_line] = "\033[%p1%dL",
   1351    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1352    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1353    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1354    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
   1355    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
   1356    [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",
   1357    [kTerm_set_lr_margin] = "\033[?69h\033[%i%p1%d;%p2%ds",
   1358    [kTerm_to_status_line] = NULL,
   1359    [kTerm_reset_cursor_style] = "\033[2 q",
   1360    [kTerm_set_cursor_style] = "\033[%p1%d q",
   1361    [kTerm_enter_strikethrough_mode] = "\033[9m",
   1362    [kTerm_set_rgb_foreground] = NULL,
   1363    [kTerm_set_rgb_background] = NULL,
   1364    [kTerm_set_cursor_color] = "\033]12;%p1%s\a",
   1365    [kTerm_reset_cursor_color] = "\033]112\a",
   1366    [kTerm_set_underline_style] = NULL,
   1367  },
   1368  .keys = {
   1369    [kTermKey_backspace] = {"\b", NULL},
   1370    [kTermKey_beg] = {"\033OE", NULL},
   1371    [kTermKey_btab] = {"\033[Z", NULL},
   1372    [kTermKey_clear] = {NULL, NULL},
   1373    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
   1374    [kTermKey_end] = {"\033OF", "\033[1;2F"},
   1375    [kTermKey_find] = {NULL, NULL},
   1376    [kTermKey_home] = {"\033OH", "\033[1;2H"},
   1377    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
   1378    [kTermKey_npage] = {"\033[6~", NULL},
   1379    [kTermKey_ppage] = {"\033[5~", NULL},
   1380    [kTermKey_select] = {NULL, NULL},
   1381    [kTermKey_suspend] = {NULL, NULL},
   1382    [kTermKey_undo] = {NULL, NULL},
   1383  },
   1384  .f_keys = {
   1385    // note: offset by one, f_keys[0] is F1 and so on
   1386    [0] = "\033OP",
   1387    [1] = "\033OQ",
   1388    [2] = "\033OR",
   1389    [3] = "\033OS",
   1390    [4] = "\033[15~",
   1391    [5] = "\033[17~",
   1392    [6] = "\033[18~",
   1393    [7] = "\033[19~",
   1394    [8] = "\033[20~",
   1395    [9] = "\033[21~",
   1396    [10] = "\033[23~",
   1397    [11] = "\033[24~",
   1398    [12] = "\033[1;2P",
   1399    [13] = "\033[1;2Q",
   1400    [14] = "\033[1;2R",
   1401    [15] = "\033[1;2S",
   1402    [16] = "\033[15;2~",
   1403    [17] = "\033[17;2~",
   1404    [18] = "\033[18;2~",
   1405    [19] = "\033[19;2~",
   1406    [20] = "\033[20;2~",
   1407    [21] = "\033[21;2~",
   1408    [22] = "\033[23;2~",
   1409    [23] = "\033[24;2~",
   1410    [24] = "\033[1;5P",
   1411    [25] = "\033[1;5Q",
   1412    [26] = "\033[1;5R",
   1413    [27] = "\033[1;5S",
   1414    [28] = "\033[15;5~",
   1415    [29] = "\033[17;5~",
   1416    [30] = "\033[18;5~",
   1417    [31] = "\033[19;5~",
   1418    [32] = "\033[20;5~",
   1419    [33] = "\033[21;5~",
   1420    [34] = "\033[23;5~",
   1421    [35] = "\033[24;5~",
   1422    [36] = "\033[1;6P",
   1423    [37] = "\033[1;6Q",
   1424    [38] = "\033[1;6R",
   1425    [39] = "\033[1;6S",
   1426    [40] = "\033[15;6~",
   1427    [41] = "\033[17;6~",
   1428    [42] = "\033[18;6~",
   1429    [43] = "\033[19;6~",
   1430    [44] = "\033[20;6~",
   1431    [45] = "\033[21;6~",
   1432    [46] = "\033[23;6~",
   1433    [47] = "\033[24;6~",
   1434    [48] = "\033[1;3P",
   1435    [49] = "\033[1;3Q",
   1436    [50] = "\033[1;3R",
   1437    [51] = "\033[1;3S",
   1438    [52] = "\033[15;3~",
   1439    [53] = "\033[17;3~",
   1440    [54] = "\033[18;3~",
   1441    [55] = "\033[19;3~",
   1442    [56] = "\033[20;3~",
   1443    [57] = "\033[21;3~",
   1444    [58] = "\033[23;3~",
   1445    [59] = "\033[24;3~",
   1446    [60] = "\033[1;4P",
   1447    [61] = "\033[1;4Q",
   1448    [62] = "\033[1;4R",
   1449  },
   1450 };
   1451 
   1452 static const TerminfoEntry cygwin_terminfo = {
   1453  .bce = false,
   1454  .has_Tc_or_RGB = false,
   1455  .Su = false,
   1456  .max_colors = 8,
   1457  .lines = -1,
   1458  .columns = -1,
   1459  .defs = {
   1460    [kTerm_carriage_return] = "\r",
   1461    [kTerm_change_scroll_region] = NULL,
   1462    [kTerm_clear_screen] = "\033[H\033[J",
   1463    [kTerm_clr_eol] = "\033[K",
   1464    [kTerm_clr_eos] = "\033[J",
   1465    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1466    [kTerm_cursor_down] = "\033[B",
   1467    [kTerm_cursor_invisible] = NULL,
   1468    [kTerm_cursor_left] = "\b",
   1469    [kTerm_cursor_home] = "\033[H",
   1470    [kTerm_cursor_normal] = NULL,
   1471    [kTerm_cursor_up] = "\033[A",
   1472    [kTerm_cursor_right] = "\033[C",
   1473    [kTerm_delete_line] = "\033[M",
   1474    [kTerm_enter_blink_mode] = NULL,
   1475    [kTerm_enter_bold_mode] = "\033[1m",
   1476    [kTerm_enter_ca_mode] = "\0337\033[?47h",
   1477    [kTerm_enter_dim_mode] = NULL,
   1478    [kTerm_enter_italics_mode] = NULL,
   1479    [kTerm_enter_reverse_mode] = "\033[7m",
   1480    [kTerm_enter_secure_mode] = "\033[8m",
   1481    [kTerm_enter_standout_mode] = "\033[7m",
   1482    [kTerm_enter_underline_mode] = "\033[4m",
   1483    [kTerm_erase_chars] = NULL,
   1484    [kTerm_exit_attribute_mode] = "\033[0;10m",
   1485    [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
   1486    [kTerm_from_status_line] = "\a",
   1487    [kTerm_insert_line] = "\033[L",
   1488    [kTerm_keypad_local] = NULL,
   1489    [kTerm_keypad_xmit] = NULL,
   1490    [kTerm_parm_delete_line] = "\033[%p1%dM",
   1491    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1492    [kTerm_parm_insert_line] = "\033[%p1%dL",
   1493    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1494    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1495    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1496    [kTerm_set_a_background] = "\033[4%p1%dm",
   1497    [kTerm_set_a_foreground] = "\033[3%p1%dm",
   1498    [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",
   1499    [kTerm_set_lr_margin] = NULL,
   1500    [kTerm_to_status_line] = "\033];",
   1501    [kTerm_reset_cursor_style] = NULL,
   1502    [kTerm_set_cursor_style] = NULL,
   1503    [kTerm_enter_strikethrough_mode] = NULL,
   1504    [kTerm_set_rgb_foreground] = NULL,
   1505    [kTerm_set_rgb_background] = NULL,
   1506    [kTerm_set_cursor_color] = NULL,
   1507    [kTerm_reset_cursor_color] = NULL,
   1508    [kTerm_set_underline_style] = NULL,
   1509  },
   1510  .keys = {
   1511    [kTermKey_backspace] = {"\b", NULL},
   1512    [kTermKey_beg] = {NULL, NULL},
   1513    [kTermKey_btab] = {NULL, NULL},
   1514    [kTermKey_clear] = {NULL, NULL},
   1515    [kTermKey_dc] = {"\033[3~", NULL},
   1516    [kTermKey_end] = {"\033[4~", NULL},
   1517    [kTermKey_find] = {NULL, NULL},
   1518    [kTermKey_home] = {"\033[1~", NULL},
   1519    [kTermKey_ic] = {"\033[2~", NULL},
   1520    [kTermKey_npage] = {"\033[6~", NULL},
   1521    [kTermKey_ppage] = {"\033[5~", NULL},
   1522    [kTermKey_select] = {NULL, NULL},
   1523    [kTermKey_suspend] = {"^Z", NULL},
   1524    [kTermKey_undo] = {NULL, NULL},
   1525  },
   1526  .f_keys = {
   1527    // note: offset by one, f_keys[0] is F1 and so on
   1528    [0] = "\033[[A",
   1529    [1] = "\033[[B",
   1530    [2] = "\033[[C",
   1531    [3] = "\033[[D",
   1532    [4] = "\033[[E",
   1533    [5] = "\033[17~",
   1534    [6] = "\033[18~",
   1535    [7] = "\033[19~",
   1536    [8] = "\033[20~",
   1537    [9] = "\033[21~",
   1538    [10] = "\033[23~",
   1539    [11] = "\033[24~",
   1540    [12] = "\033[25~",
   1541    [13] = "\033[26~",
   1542    [14] = "\033[28~",
   1543    [15] = "\033[29~",
   1544    [16] = "\033[31~",
   1545    [17] = "\033[32~",
   1546    [18] = "\033[33~",
   1547    [19] = "\033[34~",
   1548  },
   1549 };
   1550 
   1551 static const TerminfoEntry win32con_terminfo = {
   1552  .bce = false,
   1553  .has_Tc_or_RGB = false,
   1554  .Su = false,
   1555  .max_colors = 8,
   1556  .lines = -1,
   1557  .columns = -1,
   1558  .defs = {
   1559    [kTerm_carriage_return] = "\r",
   1560    [kTerm_change_scroll_region] = NULL,
   1561    [kTerm_clear_screen] = "\033[H\033[J",
   1562    [kTerm_clr_eol] = "\033[K",
   1563    [kTerm_clr_eos] = "\033[J",
   1564    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1565    [kTerm_cursor_down] = "\033[B",
   1566    [kTerm_cursor_invisible] = NULL,
   1567    [kTerm_cursor_left] = "\b",
   1568    [kTerm_cursor_home] = "\033[H",
   1569    [kTerm_cursor_normal] = NULL,
   1570    [kTerm_cursor_up] = "\033[A",
   1571    [kTerm_cursor_right] = "\033[C",
   1572    [kTerm_delete_line] = NULL,
   1573    [kTerm_enter_blink_mode] = NULL,
   1574    [kTerm_enter_bold_mode] = "\033[1m",
   1575    [kTerm_enter_ca_mode] = "\0337\033[?47h",
   1576    [kTerm_enter_dim_mode] = NULL,
   1577    [kTerm_enter_italics_mode] = NULL,
   1578    [kTerm_enter_reverse_mode] = "\033[7m",
   1579    [kTerm_enter_secure_mode] = NULL,
   1580    [kTerm_enter_standout_mode] = "\033[7m",
   1581    [kTerm_enter_underline_mode] = NULL,
   1582    [kTerm_erase_chars] = NULL,
   1583    [kTerm_exit_attribute_mode] = "\033[0m",
   1584    [kTerm_exit_ca_mode] = "\033[2J\033[?47l\0338",
   1585    [kTerm_from_status_line] = NULL,
   1586    [kTerm_insert_line] = NULL,
   1587    [kTerm_keypad_local] = NULL,
   1588    [kTerm_keypad_xmit] = NULL,
   1589    [kTerm_parm_delete_line] = NULL,
   1590    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1591    [kTerm_parm_insert_line] = NULL,
   1592    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1593    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1594    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1595    [kTerm_set_a_background] = "\033[4%p1%dm",
   1596    [kTerm_set_a_foreground] = "\033[3%p1%dm",
   1597    [kTerm_set_attributes] = "\033[0%?%p1%t;7%;%?%p3%t;7%;%?%p6%t;1%;m",
   1598    [kTerm_set_lr_margin] = NULL,
   1599    [kTerm_to_status_line] = NULL,
   1600    [kTerm_reset_cursor_style] = "\033[0 q",
   1601    [kTerm_set_cursor_style] = "\033[%p1%d q",
   1602    [kTerm_enter_strikethrough_mode] = NULL,
   1603    [kTerm_set_rgb_foreground] = NULL,
   1604    [kTerm_set_rgb_background] = NULL,
   1605    [kTerm_set_cursor_color] = NULL,
   1606    [kTerm_reset_cursor_color] = NULL,
   1607    [kTerm_set_underline_style] = NULL,
   1608  },
   1609  .keys = {
   1610    [kTermKey_backspace] = {"\b", NULL},
   1611    [kTermKey_beg] = {NULL, NULL},
   1612    [kTermKey_btab] = {NULL, NULL},
   1613    [kTermKey_clear] = {NULL, NULL},
   1614    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
   1615    [kTermKey_end] = {"\033[4~", "\033[4;2~"},
   1616    [kTermKey_find] = {NULL, NULL},
   1617    [kTermKey_home] = {"\033[1~", "\033[1;2~"},
   1618    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
   1619    [kTermKey_npage] = {"\033[6~", NULL},
   1620    [kTermKey_ppage] = {"\033[5~", NULL},
   1621    [kTermKey_select] = {NULL, NULL},
   1622    [kTermKey_suspend] = {"^Z", NULL},
   1623    [kTermKey_undo] = {NULL, NULL},
   1624  },
   1625  .f_keys = {
   1626    // note: offset by one, f_keys[0] is F1 and so on
   1627    [0] = "\033[[A",
   1628    [1] = "\033[[B",
   1629    [2] = "\033[[C",
   1630    [3] = "\033[[D",
   1631    [4] = "\033[[E",
   1632    [5] = "\033[17~",
   1633    [6] = "\033[18~",
   1634    [7] = "\033[19~",
   1635    [8] = "\033[20~",
   1636    [9] = "\033[21~",
   1637    [10] = "\033[23~",
   1638    [11] = "\033[24~",
   1639    [12] = "\033[25~",
   1640    [13] = "\033[26~",
   1641    [14] = "\033[28~",
   1642    [15] = "\033[29~",
   1643    [16] = "\033[31~",
   1644    [17] = "\033[32~",
   1645    [18] = "\033[33~",
   1646    [19] = "\033[34~",
   1647    [20] = "\033[23$",
   1648    [21] = "\033[24$",
   1649    [22] = "\033[11\136",
   1650    [23] = "\033[12\136",
   1651    [24] = "\033[13\136",
   1652    [25] = "\033[14\136",
   1653    [26] = "\033[15\136",
   1654    [27] = "\033[17\136",
   1655    [28] = "\033[18\136",
   1656    [29] = "\033[19\136",
   1657    [30] = "\033[20\136",
   1658    [31] = "\033[21\136",
   1659    [32] = "\033[23\136",
   1660    [33] = "\033[24\136",
   1661    [34] = "\033[25\136",
   1662    [35] = "\033[26\136",
   1663    [36] = "\033[28\136",
   1664    [37] = "\033[29\136",
   1665    [38] = "\033[31\136",
   1666    [40] = "\033[32\136",
   1667    [41] = "\033[33\136",
   1668    [42] = "\033[34\136",
   1669    [43] = "\033[23@",
   1670    [44] = "\033[24@",
   1671  },
   1672 };
   1673 
   1674 static const TerminfoEntry conemu_terminfo = {
   1675  .bce = true,
   1676  .has_Tc_or_RGB = false,
   1677  .Su = false,
   1678  .max_colors = 0x100,
   1679  .lines = 24,
   1680  .columns = 80,
   1681  .defs = {
   1682    [kTerm_carriage_return] = "\r",
   1683    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
   1684    [kTerm_clear_screen] = "\033[H\033[2J",
   1685    [kTerm_clr_eol] = "\033[K",
   1686    [kTerm_clr_eos] = "\033[J",
   1687    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1688    [kTerm_cursor_down] = "\033[B",
   1689    [kTerm_cursor_invisible] = "\033[?25l",
   1690    [kTerm_cursor_left] = "\b",
   1691    [kTerm_cursor_home] = "\033[H",
   1692    [kTerm_cursor_normal] = "\033[?25h",
   1693    [kTerm_cursor_up] = "\033[A",
   1694    [kTerm_cursor_right] = "\033[C",
   1695    [kTerm_delete_line] = "\033[M",
   1696    [kTerm_enter_blink_mode] = NULL,
   1697    [kTerm_enter_bold_mode] = "\033[1m",
   1698    [kTerm_enter_ca_mode] = "\033[?1049h",
   1699    [kTerm_enter_dim_mode] = NULL,
   1700    [kTerm_enter_italics_mode] = "\033[3m",
   1701    [kTerm_enter_reverse_mode] = "\033[7m",
   1702    [kTerm_enter_secure_mode] = NULL,
   1703    [kTerm_enter_standout_mode] = "\033[7m",
   1704    [kTerm_enter_underline_mode] = "\033[4m",
   1705    [kTerm_erase_chars] = "\033[%p1%dX",
   1706    [kTerm_exit_attribute_mode] = "\033[0m",
   1707    [kTerm_exit_ca_mode] = "\033[?1049l",
   1708    [kTerm_from_status_line] = NULL,
   1709    [kTerm_insert_line] = "\033[L",
   1710    [kTerm_keypad_local] = NULL,
   1711    [kTerm_keypad_xmit] = NULL,
   1712    [kTerm_parm_delete_line] = "\033[%p1%dM",
   1713    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1714    [kTerm_parm_insert_line] = "\033[%p1%dL",
   1715    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1716    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1717    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1718    [kTerm_set_a_background] = "\033[48;5;%p1%dm",
   1719    [kTerm_set_a_foreground] = "\033[38;5;%p1%dm",
   1720    [kTerm_set_attributes] = "\033[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m",
   1721    [kTerm_set_lr_margin] = NULL,
   1722    [kTerm_to_status_line] = NULL,
   1723    [kTerm_reset_cursor_style] = "\033[2 q",
   1724    [kTerm_set_cursor_style] = "\033[%p1%d q",
   1725    [kTerm_enter_strikethrough_mode] = NULL,
   1726    [kTerm_set_rgb_foreground] = NULL,
   1727    [kTerm_set_rgb_background] = NULL,
   1728    [kTerm_set_cursor_color] = NULL,
   1729    [kTerm_reset_cursor_color] = NULL,
   1730    [kTerm_set_underline_style] = NULL,
   1731  },
   1732  .keys = {
   1733    [kTermKey_backspace] = {"\b", NULL},
   1734    [kTermKey_beg] = {"\033OE", NULL},
   1735    [kTermKey_btab] = {"\033[Z", NULL},
   1736    [kTermKey_clear] = {NULL, NULL},
   1737    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
   1738    [kTermKey_end] = {"\033[4~", "\033[4;2~"},
   1739    [kTermKey_find] = {NULL, NULL},
   1740    [kTermKey_home] = {"\033[1~", "\033[1;2~"},
   1741    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
   1742    [kTermKey_npage] = {"\033[6~", NULL},
   1743    [kTermKey_ppage] = {"\033[5~", NULL},
   1744    [kTermKey_select] = {NULL, NULL},
   1745    [kTermKey_suspend] = {NULL, NULL},
   1746    [kTermKey_undo] = {NULL, NULL},
   1747  },
   1748  .f_keys = {
   1749    // note: offset by one, f_keys[0] is F1 and so on
   1750    [0] = "\033[[A",
   1751    [1] = "\033[[B",
   1752    [2] = "\033[[C",
   1753    [3] = "\033[[D",
   1754    [4] = "\033[[E",
   1755    [5] = "\033[17~",
   1756    [6] = "\033[18~",
   1757    [7] = "\033[19~",
   1758    [8] = "\033[20~",
   1759    [9] = "\033[21~",
   1760    [10] = "\033[23~",
   1761    [11] = "\033[24~",
   1762    [12] = "\033[25~",
   1763    [13] = "\033[26~",
   1764    [14] = "\033[28~",
   1765    [15] = "\033[29~",
   1766    [16] = "\033[31~",
   1767    [17] = "\033[32~",
   1768    [18] = "\033[33~",
   1769    [19] = "\033[34~",
   1770    [20] = "\033[23$",
   1771    [21] = "\033[24$",
   1772    [22] = "\033[11\136",
   1773    [23] = "\033[12\136",
   1774    [24] = "\033[13\136",
   1775    [25] = "\033[14\136",
   1776    [26] = "\033[15\136",
   1777    [27] = "\033[17\136",
   1778    [28] = "\033[18\136",
   1779    [29] = "\033[19\136",
   1780    [30] = "\033[20\136",
   1781    [31] = "\033[21\136",
   1782    [32] = "\033[23\136",
   1783    [33] = "\033[24\136",
   1784    [34] = "\033[25\136",
   1785    [35] = "\033[26\136",
   1786    [36] = "\033[28\136",
   1787    [37] = "\033[29\136",
   1788    [38] = "\033[31\136",
   1789    [39] = "\033[1;6S",
   1790    [40] = "\033[32\136",
   1791    [41] = "\033[33\136",
   1792    [42] = "\033[34\136",
   1793    [43] = "\033[23@",
   1794    [44] = "\033[24@",
   1795  },
   1796 };
   1797 
   1798 static const TerminfoEntry vtpcon_terminfo = {
   1799  .bce = true,
   1800  .has_Tc_or_RGB = false,
   1801  .Su = false,
   1802  .max_colors = 0x100,
   1803  .lines = 24,
   1804  .columns = 80,
   1805  .defs = {
   1806    [kTerm_carriage_return] = "\r",
   1807    [kTerm_change_scroll_region] = "\033[%i%p1%d;%p2%dr",
   1808    [kTerm_clear_screen] = "\033[H\033[2J",
   1809    [kTerm_clr_eol] = "\033[K",
   1810    [kTerm_clr_eos] = "\033[J",
   1811    [kTerm_cursor_address] = "\033[%i%p1%d;%p2%dH",
   1812    [kTerm_cursor_down] = "\033[B",
   1813    [kTerm_cursor_invisible] = "\033[?25l",
   1814    [kTerm_cursor_left] = "\b",
   1815    [kTerm_cursor_home] = "\033[H",
   1816    [kTerm_cursor_normal] = "\033[?12l\033[?25h",
   1817    [kTerm_cursor_up] = "\033[A",
   1818    [kTerm_cursor_right] = "\033[C",
   1819    [kTerm_delete_line] = "\033[M",
   1820    [kTerm_enter_blink_mode] = NULL,
   1821    [kTerm_enter_bold_mode] = "\033[1m",
   1822    [kTerm_enter_ca_mode] = "\033[?1049h",
   1823    [kTerm_enter_dim_mode] = NULL,
   1824    [kTerm_enter_italics_mode] = "\033[3m",
   1825    [kTerm_enter_reverse_mode] = "\033[7m",
   1826    [kTerm_enter_secure_mode] = NULL,
   1827    [kTerm_enter_standout_mode] = "\033[7m",
   1828    [kTerm_enter_underline_mode] = "\033[4m",
   1829    [kTerm_erase_chars] = "\033[%p1%dX",
   1830    [kTerm_exit_attribute_mode] = "\033[0m",
   1831    [kTerm_exit_ca_mode] = "\033[?1049l",
   1832    [kTerm_from_status_line] = "\a",
   1833    [kTerm_insert_line] = "\033[L",
   1834    [kTerm_keypad_local] = NULL,
   1835    [kTerm_keypad_xmit] = NULL,
   1836    [kTerm_parm_delete_line] = "\033[%p1%dM",
   1837    [kTerm_parm_down_cursor] = "\033[%p1%dB",
   1838    [kTerm_parm_insert_line] = "\033[%p1%dL",
   1839    [kTerm_parm_left_cursor] = "\033[%p1%dD",
   1840    [kTerm_parm_right_cursor] = "\033[%p1%dC",
   1841    [kTerm_parm_up_cursor] = "\033[%p1%dA",
   1842    [kTerm_set_a_background] = "\033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
   1843    [kTerm_set_a_foreground] = "\033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
   1844    [kTerm_set_attributes] = "\033[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;%?%p9%t;9%;m",
   1845    [kTerm_set_lr_margin] = NULL,
   1846    [kTerm_to_status_line] = "\033]0;",
   1847    [kTerm_reset_cursor_style] = "\033[2 q",
   1848    [kTerm_set_cursor_style] = "\033[%p1%d q",
   1849    [kTerm_enter_strikethrough_mode] = "\033[9m",
   1850    [kTerm_set_rgb_foreground] = NULL,
   1851    [kTerm_set_rgb_background] = NULL,
   1852    [kTerm_set_cursor_color] = NULL,
   1853    [kTerm_reset_cursor_color] = NULL,
   1854    [kTerm_set_underline_style] = NULL,
   1855  },
   1856  .keys = {
   1857    [kTermKey_backspace] = {"\b", NULL},
   1858    [kTermKey_beg] = {"\033OE", NULL},
   1859    [kTermKey_btab] = {"\033[Z", NULL},
   1860    [kTermKey_clear] = {NULL, NULL},
   1861    [kTermKey_dc] = {"\033[3~", "\033[3;2~"},
   1862    [kTermKey_end] = {"\033[4~", "\033[4;2~"},
   1863    [kTermKey_find] = {NULL, NULL},
   1864    [kTermKey_home] = {"\033[1~", "\033[1;2~"},
   1865    [kTermKey_ic] = {"\033[2~", "\033[2;2~"},
   1866    [kTermKey_npage] = {"\033[6~", NULL},
   1867    [kTermKey_ppage] = {"\033[5~", NULL},
   1868    [kTermKey_select] = {NULL, NULL},
   1869    [kTermKey_suspend] = {NULL, NULL},
   1870    [kTermKey_undo] = {NULL, NULL},
   1871  },
   1872  .f_keys = {
   1873    // note: offset by one, f_keys[0] is F1 and so on
   1874    [0] = "\033[[A",
   1875    [1] = "\033[[B",
   1876    [2] = "\033[[C",
   1877    [3] = "\033[[D",
   1878    [4] = "\033[[E",
   1879    [5] = "\033[17~",
   1880    [6] = "\033[18~",
   1881    [7] = "\033[19~",
   1882    [8] = "\033[20~",
   1883    [9] = "\033[21~",
   1884    [10] = "\033[23~",
   1885    [11] = "\033[24~",
   1886    [12] = "\033[25~",
   1887    [13] = "\033[26~",
   1888    [14] = "\033[28~",
   1889    [15] = "\033[29~",
   1890    [16] = "\033[31~",
   1891    [17] = "\033[32~",
   1892    [18] = "\033[33~",
   1893    [19] = "\033[34~",
   1894    [20] = "\033[23$",
   1895    [21] = "\033[24$",
   1896    [22] = "\033[11\136",
   1897    [23] = "\033[12\136",
   1898    [24] = "\033[13\136",
   1899    [25] = "\033[14\136",
   1900    [26] = "\033[15\136",
   1901    [27] = "\033[17\136",
   1902    [28] = "\033[18\136",
   1903    [29] = "\033[19\136",
   1904    [30] = "\033[20\136",
   1905    [31] = "\033[21\136",
   1906    [32] = "\033[23\136",
   1907    [33] = "\033[24\136",
   1908    [34] = "\033[25\136",
   1909    [35] = "\033[26\136",
   1910    [36] = "\033[28\136",
   1911    [37] = "\033[29\136",
   1912    [38] = "\033[31\136",
   1913    [39] = "\033[1;6S",
   1914    [40] = "\033[32\136",
   1915    [41] = "\033[33\136",
   1916    [42] = "\033[34\136",
   1917    [43] = "\033[23@",
   1918    [44] = "\033[24@",
   1919  },
   1920 };
   1921 
   1922 #define XLIST_TERMINFO_BUILTIN \
   1923  X(carriage_return) \
   1924  X(change_scroll_region) \
   1925  X(clear_screen) \
   1926  X(clr_eol) \
   1927  X(clr_eos) \
   1928  X(cursor_address) \
   1929  X(cursor_down) \
   1930  X(cursor_invisible) \
   1931  X(cursor_left) \
   1932  X(cursor_home) \
   1933  X(cursor_normal) \
   1934  X(cursor_up) \
   1935  X(cursor_right) \
   1936  X(delete_line) \
   1937  X(enter_blink_mode) \
   1938  X(enter_bold_mode) \
   1939  X(enter_ca_mode) \
   1940  X(enter_dim_mode) \
   1941  X(enter_italics_mode) \
   1942  X(enter_reverse_mode) \
   1943  X(enter_secure_mode) \
   1944  X(enter_standout_mode) \
   1945  X(enter_underline_mode) \
   1946  X(erase_chars) \
   1947  X(exit_attribute_mode) \
   1948  X(exit_ca_mode) \
   1949  X(from_status_line) \
   1950  X(insert_line) \
   1951  X(keypad_local) \
   1952  X(keypad_xmit) \
   1953  X(parm_delete_line) \
   1954  X(parm_down_cursor) \
   1955  X(parm_insert_line) \
   1956  X(parm_left_cursor) \
   1957  X(parm_right_cursor) \
   1958  X(parm_up_cursor) \
   1959  X(set_a_background) \
   1960  X(set_a_foreground) \
   1961  X(set_attributes) \
   1962  X(set_lr_margin) \
   1963  X(to_status_line) \
   1964 // end of list
   1965 
   1966 #define XLIST_TERMINFO_EXT \
   1967  X(reset_cursor_style, Se) \
   1968  X(set_cursor_style, Ss) \
   1969  X(enter_strikethrough_mode, smxx) \
   1970  X(set_rgb_foreground, setrgbf) \
   1971  X(set_rgb_background, setrgbb) \
   1972  X(set_cursor_color, Cs) \
   1973  X(reset_cursor_color, Cr) \
   1974  X(set_underline_style, Smulx) \
   1975 // end of list
   1976 
   1977 #define XYLIST_TERMINFO_KEYS \
   1978  X(backspace) \
   1979  Y(beg) \
   1980  X(btab) \
   1981  X(clear) \
   1982  Y(dc) \
   1983  Y(end) \
   1984  Y(find) \
   1985  Y(home) \
   1986  Y(ic) \
   1987  X(npage) \
   1988  X(ppage) \
   1989  X(select) \
   1990  Y(suspend) \
   1991  Y(undo) \
   1992 // end of list
   1993 
   1994 #define XLIST_TERMINFO_FKEYS \
   1995  X(f1) \
   1996  X(f2) \
   1997  X(f3) \
   1998  X(f4) \
   1999  X(f5) \
   2000  X(f6) \
   2001  X(f7) \
   2002  X(f8) \
   2003  X(f9) \
   2004  X(f10) \
   2005  X(f11) \
   2006  X(f12) \
   2007  X(f13) \
   2008  X(f14) \
   2009  X(f15) \
   2010  X(f16) \
   2011  X(f17) \
   2012  X(f18) \
   2013  X(f19) \
   2014  X(f20) \
   2015  X(f21) \
   2016  X(f22) \
   2017  X(f23) \
   2018  X(f24) \
   2019  X(f25) \
   2020  X(f26) \
   2021  X(f27) \
   2022  X(f28) \
   2023  X(f29) \
   2024  X(f30) \
   2025  X(f31) \
   2026  X(f32) \
   2027  X(f33) \
   2028  X(f34) \
   2029  X(f35) \
   2030  X(f36) \
   2031  X(f37) \
   2032  X(f38) \
   2033  X(f39) \
   2034  X(f40) \
   2035  X(f41) \
   2036  X(f42) \
   2037  X(f43) \
   2038  X(f44) \
   2039  X(f45) \
   2040  X(f46) \
   2041  X(f47) \
   2042  X(f48) \
   2043  X(f49) \
   2044  X(f50) \
   2045  X(f51) \
   2046  X(f52) \
   2047  X(f53) \
   2048  X(f54) \
   2049  X(f55) \
   2050  X(f56) \
   2051  X(f57) \
   2052  X(f58) \
   2053  X(f59) \
   2054  X(f60) \
   2055  X(f61) \
   2056  X(f62) \
   2057  X(f63) \
   2058 // end of list