From 55054a4bae5ed2a2056a60b064eeec99343f2818 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 10 Dec 2023 13:55:59 -0800 Subject: [PATCH] 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. --- fish-rust/src/curses.rs | 218 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) diff --git a/fish-rust/src/curses.rs b/fish-rust/src/curses.rs index bcccbe512..5da73638a 100644 --- a/fish-rust/src/curses.rs +++ b/fish-rust/src/curses.rs @@ -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, + pub key_a3: Option, + pub key_b2: Option, + pub key_backspace: Option, + pub key_beg: Option, + pub key_btab: Option, + pub key_c1: Option, + pub key_c3: Option, + pub key_cancel: Option, + pub key_catab: Option, + pub key_clear: Option, + pub key_close: Option, + pub key_command: Option, + pub key_copy: Option, + pub key_create: Option, + pub key_ctab: Option, + pub key_dc: Option, + pub key_dl: Option, + pub key_down: Option, + pub key_eic: Option, + pub key_end: Option, + pub key_enter: Option, + pub key_eol: Option, + pub key_eos: Option, + pub key_exit: Option, + pub key_f0: Option, + pub key_f1: Option, + pub key_f2: Option, + pub key_f3: Option, + pub key_f4: Option, + pub key_f5: Option, + pub key_f6: Option, + pub key_f7: Option, + pub key_f8: Option, + pub key_f9: Option, + pub key_f10: Option, + pub key_f11: Option, + pub key_f12: Option, + pub key_f13: Option, + pub key_f14: Option, + pub key_f15: Option, + pub key_f16: Option, + pub key_f17: Option, + pub key_f18: Option, + pub key_f19: Option, + pub key_f20: Option, + // Note key_f21 through key_f63 are available but no actual keyboard supports them. + pub key_find: Option, + pub key_help: Option, + pub key_home: Option, + pub key_ic: Option, + pub key_il: Option, + pub key_left: Option, + pub key_ll: Option, + pub key_mark: Option, + pub key_message: Option, + pub key_move: Option, + pub key_next: Option, + pub key_npage: Option, + pub key_open: Option, + pub key_options: Option, + pub key_ppage: Option, + pub key_previous: Option, + pub key_print: Option, + pub key_redo: Option, + pub key_reference: Option, + pub key_refresh: Option, + pub key_replace: Option, + pub key_restart: Option, + pub key_resume: Option, + pub key_right: Option, + pub key_save: Option, + pub key_sbeg: Option, + pub key_scancel: Option, + pub key_scommand: Option, + pub key_scopy: Option, + pub key_screate: Option, + pub key_sdc: Option, + pub key_sdl: Option, + pub key_select: Option, + pub key_send: Option, + pub key_seol: Option, + pub key_sexit: Option, + pub key_sf: Option, + pub key_sfind: Option, + pub key_shelp: Option, + pub key_shome: Option, + pub key_sic: Option, + pub key_sleft: Option, + pub key_smessage: Option, + pub key_smove: Option, + pub key_snext: Option, + pub key_soptions: Option, + pub key_sprevious: Option, + pub key_sprint: Option, + pub key_sr: Option, + pub key_sredo: Option, + pub key_sreplace: Option, + pub key_sright: Option, + pub key_srsume: Option, + pub key_ssave: Option, + pub key_ssuspend: Option, + pub key_stab: Option, + pub key_sundo: Option, + pub key_suspend: Option, + pub key_undo: Option, + pub key_up: Option, } impl Term { @@ -191,6 +300,115 @@ fn new() -> Self { // 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"), } } }