Add keys to our curses Term structure

This will support rewriting the input machinery in Rust.

Note that while there are a lot of keys here, in practice this is very fast -
taking on the order of microseconds to populate.
This commit is contained in:
ridiculousfish 2023-12-10 13:55:59 -08:00
parent b895cf49ca
commit 55054a4bae

View file

@ -144,6 +144,115 @@ pub struct Term {
// Flag/boolean capabilities
pub eat_newline_glitch: bool,
pub auto_right_margin: bool,
// Keys.
pub key_a1: Option<CString>,
pub key_a3: Option<CString>,
pub key_b2: Option<CString>,
pub key_backspace: Option<CString>,
pub key_beg: Option<CString>,
pub key_btab: Option<CString>,
pub key_c1: Option<CString>,
pub key_c3: Option<CString>,
pub key_cancel: Option<CString>,
pub key_catab: Option<CString>,
pub key_clear: Option<CString>,
pub key_close: Option<CString>,
pub key_command: Option<CString>,
pub key_copy: Option<CString>,
pub key_create: Option<CString>,
pub key_ctab: Option<CString>,
pub key_dc: Option<CString>,
pub key_dl: Option<CString>,
pub key_down: Option<CString>,
pub key_eic: Option<CString>,
pub key_end: Option<CString>,
pub key_enter: Option<CString>,
pub key_eol: Option<CString>,
pub key_eos: Option<CString>,
pub key_exit: Option<CString>,
pub key_f0: Option<CString>,
pub key_f1: Option<CString>,
pub key_f2: Option<CString>,
pub key_f3: Option<CString>,
pub key_f4: Option<CString>,
pub key_f5: Option<CString>,
pub key_f6: Option<CString>,
pub key_f7: Option<CString>,
pub key_f8: Option<CString>,
pub key_f9: Option<CString>,
pub key_f10: Option<CString>,
pub key_f11: Option<CString>,
pub key_f12: Option<CString>,
pub key_f13: Option<CString>,
pub key_f14: Option<CString>,
pub key_f15: Option<CString>,
pub key_f16: Option<CString>,
pub key_f17: Option<CString>,
pub key_f18: Option<CString>,
pub key_f19: Option<CString>,
pub key_f20: Option<CString>,
// Note key_f21 through key_f63 are available but no actual keyboard supports them.
pub key_find: Option<CString>,
pub key_help: Option<CString>,
pub key_home: Option<CString>,
pub key_ic: Option<CString>,
pub key_il: Option<CString>,
pub key_left: Option<CString>,
pub key_ll: Option<CString>,
pub key_mark: Option<CString>,
pub key_message: Option<CString>,
pub key_move: Option<CString>,
pub key_next: Option<CString>,
pub key_npage: Option<CString>,
pub key_open: Option<CString>,
pub key_options: Option<CString>,
pub key_ppage: Option<CString>,
pub key_previous: Option<CString>,
pub key_print: Option<CString>,
pub key_redo: Option<CString>,
pub key_reference: Option<CString>,
pub key_refresh: Option<CString>,
pub key_replace: Option<CString>,
pub key_restart: Option<CString>,
pub key_resume: Option<CString>,
pub key_right: Option<CString>,
pub key_save: Option<CString>,
pub key_sbeg: Option<CString>,
pub key_scancel: Option<CString>,
pub key_scommand: Option<CString>,
pub key_scopy: Option<CString>,
pub key_screate: Option<CString>,
pub key_sdc: Option<CString>,
pub key_sdl: Option<CString>,
pub key_select: Option<CString>,
pub key_send: Option<CString>,
pub key_seol: Option<CString>,
pub key_sexit: Option<CString>,
pub key_sf: Option<CString>,
pub key_sfind: Option<CString>,
pub key_shelp: Option<CString>,
pub key_shome: Option<CString>,
pub key_sic: Option<CString>,
pub key_sleft: Option<CString>,
pub key_smessage: Option<CString>,
pub key_smove: Option<CString>,
pub key_snext: Option<CString>,
pub key_soptions: Option<CString>,
pub key_sprevious: Option<CString>,
pub key_sprint: Option<CString>,
pub key_sr: Option<CString>,
pub key_sredo: Option<CString>,
pub key_sreplace: Option<CString>,
pub key_sright: Option<CString>,
pub key_srsume: Option<CString>,
pub key_ssave: Option<CString>,
pub key_ssuspend: Option<CString>,
pub key_stab: Option<CString>,
pub key_sundo: Option<CString>,
pub key_suspend: Option<CString>,
pub key_undo: Option<CString>,
pub key_up: Option<CString>,
}
impl Term {
@ -191,6 +300,115 @@ impl Term {
// Flag/boolean capabilities
eat_newline_glitch: get_flag_cap("xn"),
auto_right_margin: get_flag_cap("am"),
// Keys. See `man terminfo` for these strings.
key_a1: get_str_cap("K1"),
key_a3: get_str_cap("K3"),
key_b2: get_str_cap("K2"),
key_backspace: get_str_cap("kb"),
key_beg: get_str_cap("@1"),
key_btab: get_str_cap("kB"),
key_c1: get_str_cap("K4"),
key_c3: get_str_cap("K5"),
key_cancel: get_str_cap("@2"),
key_catab: get_str_cap("ka"),
key_clear: get_str_cap("kC"),
key_close: get_str_cap("@3"),
key_command: get_str_cap("@4"),
key_copy: get_str_cap("@5"),
key_create: get_str_cap("@6"),
key_ctab: get_str_cap("kt"),
key_dc: get_str_cap("kD"),
key_dl: get_str_cap("kL"),
key_down: get_str_cap("kd"),
key_eic: get_str_cap("kM"),
key_end: get_str_cap("@7"),
key_enter: get_str_cap("@8"),
key_eol: get_str_cap("kE"),
key_eos: get_str_cap("kS"),
key_exit: get_str_cap("@9"),
key_f0: get_str_cap("k0"),
key_f1: get_str_cap("k1"),
key_f10: get_str_cap("k;"),
key_f11: get_str_cap("F1"),
key_f12: get_str_cap("F2"),
key_f13: get_str_cap("F3"),
key_f14: get_str_cap("F4"),
key_f15: get_str_cap("F5"),
key_f16: get_str_cap("F6"),
key_f17: get_str_cap("F7"),
key_f18: get_str_cap("F8"),
key_f19: get_str_cap("F9"),
key_f2: get_str_cap("k2"),
key_f20: get_str_cap("FA"),
// Note key_f21 through key_f63 are available but no actual keyboard supports them.
key_f3: get_str_cap("k3"),
key_f4: get_str_cap("k4"),
key_f5: get_str_cap("k5"),
key_f6: get_str_cap("k6"),
key_f7: get_str_cap("k7"),
key_f8: get_str_cap("k8"),
key_f9: get_str_cap("k9"),
key_find: get_str_cap("@0"),
key_help: get_str_cap("%1"),
key_home: get_str_cap("kh"),
key_ic: get_str_cap("kI"),
key_il: get_str_cap("kA"),
key_left: get_str_cap("kl"),
key_ll: get_str_cap("kH"),
key_mark: get_str_cap("%2"),
key_message: get_str_cap("%3"),
key_move: get_str_cap("%4"),
key_next: get_str_cap("%5"),
key_npage: get_str_cap("kN"),
key_open: get_str_cap("%6"),
key_options: get_str_cap("%7"),
key_ppage: get_str_cap("kP"),
key_previous: get_str_cap("%8"),
key_print: get_str_cap("%9"),
key_redo: get_str_cap("%0"),
key_reference: get_str_cap("&1"),
key_refresh: get_str_cap("&2"),
key_replace: get_str_cap("&3"),
key_restart: get_str_cap("&4"),
key_resume: get_str_cap("&5"),
key_right: get_str_cap("kr"),
key_save: get_str_cap("&6"),
key_sbeg: get_str_cap("&9"),
key_scancel: get_str_cap("&0"),
key_scommand: get_str_cap("*1"),
key_scopy: get_str_cap("*2"),
key_screate: get_str_cap("*3"),
key_sdc: get_str_cap("*4"),
key_sdl: get_str_cap("*5"),
key_select: get_str_cap("*6"),
key_send: get_str_cap("*7"),
key_seol: get_str_cap("*8"),
key_sexit: get_str_cap("*9"),
key_sf: get_str_cap("kF"),
key_sfind: get_str_cap("*0"),
key_shelp: get_str_cap("#1"),
key_shome: get_str_cap("#2"),
key_sic: get_str_cap("#3"),
key_sleft: get_str_cap("#4"),
key_smessage: get_str_cap("%a"),
key_smove: get_str_cap("%b"),
key_snext: get_str_cap("%c"),
key_soptions: get_str_cap("%d"),
key_sprevious: get_str_cap("%e"),
key_sprint: get_str_cap("%f"),
key_sr: get_str_cap("kR"),
key_sredo: get_str_cap("%g"),
key_sreplace: get_str_cap("%h"),
key_sright: get_str_cap("%i"),
key_srsume: get_str_cap("%j"),
key_ssave: get_str_cap("!1"),
key_ssuspend: get_str_cap("!2"),
key_stab: get_str_cap("kT"),
key_sundo: get_str_cap("!3"),
key_suspend: get_str_cap("&7"),
key_undo: get_str_cap("&8"),
key_up: get_str_cap("ku"),
}
}
}