Fix keyboard input

Shift/Ctrl/Alt + special keys (arrow, pageup/down, home/end, ins/del)
are better supported.
This commit is contained in:
Alexandre Bury 2016-06-25 19:28:42 -07:00
parent 7ad9a6ad4d
commit 822ffa7a7b

View File

@ -28,50 +28,94 @@ pub enum Key {
/// Tabulation key
Tab,
ShiftTab,
Left,
Right,
Up,
Down,
PageUp,
PageDown,
Backspace,
Home,
ShiftHome,
CtrlHome,
CtrlShiftHome,
End,
ShiftEnd,
CtrlEnd,
CtrlShiftEnd,
/// Delete key
Del,
ShiftDel,
CtrlDel,
CtrlShiftDel,
/// Insert key.
Ins,
/// Insert key while ctrl is pressed.
CtrlIns,
/// Escape key.
Esc,
/// The 5 in the center of the keypad, when numlock is disabled.
NumpadCenter,
CtrlPageUp,
CtrlPageDown,
ShiftUp,
ShiftDown,
Left,
/// Left arrow while shift is pressed.
ShiftLeft,
AltLeft,
AltShiftLeft,
CtrlLeft,
CtrlShiftLeft,
CtrlAltLeft,
Right,
/// Right arrow while shift is pressed.
ShiftRight,
CtrlShiftLeft,
CtrlShiftRight,
CtrlShiftUp,
CtrlShiftDown,
CtrlLeft,
AltRight,
AltShiftRight,
CtrlRight,
CtrlShiftRight,
CtrlAltRight,
Up,
ShiftUp,
AltUp,
AltShiftUp,
CtrlUp,
CtrlShiftUp,
CtrlAltUp,
Down,
ShiftDown,
AltDown,
AltShiftDown,
CtrlDown,
CtrlShiftDown,
CtrlAltDown,
PageUp,
ShiftPageUp,
AltPageUp,
AltShiftPageUp,
CtrlPageUp,
CtrlShiftPageUp,
CtrlAltPageUp,
PageDown,
ShiftPageDown,
AltPageDown,
AltShiftPageDown,
CtrlPageDown,
CtrlShiftPageDown,
CtrlAltPageDown,
Home,
ShiftHome,
AltHome,
AltShiftHome,
CtrlHome,
CtrlShiftHome,
CtrlAltHome,
End,
ShiftEnd,
AltEnd,
AltShiftEnd,
CtrlEnd,
CtrlShiftEnd,
CtrlAltEnd,
/// Delete key
Del,
ShiftDel,
AltDel,
AltShiftDel,
CtrlDel,
CtrlShiftDel,
/// Insert key.
Ins,
/// Insert key while ctrl is pressed.
CtrlIns,
AltIns,
CtrlAltIns,
F(u8),
CtrlF(u8),
ShiftF(u8),
@ -93,24 +137,73 @@ impl Key {
27 => Key::Esc,
// `Backspace` sends 127, but Ctrl-H sends `Backspace`
127 | ncurses::KEY_BACKSPACE => Key::Backspace,
// Values under 256 are chars.
// Values 512 and above are probably extensions
// Those keys don't seem to be documented...
515 => Key::CtrlDel,
516 => Key::CtrlShiftDel,
521 => Key::CtrlDown,
522 => Key::CtrlShiftDown,
526 => Key::CtrlEnd,
527 => Key::CtrlShiftEnd,
531 => Key::CtrlHome,
532 => Key::CtrlShiftHome,
536 => Key::CtrlIns,
541 => Key::CtrlLeft,
542 => Key::CtrlShiftLeft,
546 => Key::CtrlPageDown,
551 => Key::CtrlPageUp,
556 => Key::CtrlRight,
557 => Key::CtrlShiftRight,
562 => Key::CtrlUp,
563 => Key::CtrlShiftUp,
519 => Key::AltDel,
520 => Key::AltShiftDel,
521 => Key::CtrlDel,
522 => Key::CtrlShiftDel,
// 523: CtrlAltDel?
// 524?
525 => Key::AltDown,
526 => Key::AltShiftDown,
527 => Key::CtrlDown,
528 => Key::CtrlShiftDown,
529 => Key::CtrlAltDown,
530 => Key::AltEnd,
531 => Key::AltShiftEnd,
532 => Key::CtrlEnd,
533 => Key::CtrlShiftEnd,
534 => Key::CtrlAltEnd,
535 => Key::AltHome,
536 => Key::AltShiftHome,
537 => Key::CtrlHome,
538 => Key::CtrlShiftHome,
539 => Key::CtrlAltHome,
540 => Key::AltIns,
// 541: AltShiftIns?
542 => Key::CtrlIns,
// 543: CtrlShiftIns?
544 => Key::CtrlAltIns,
545 => Key::AltLeft,
546 => Key::AltShiftLeft,
547 => Key::CtrlLeft,
548 => Key::CtrlShiftLeft,
549 => Key::CtrlAltLeft,
550 => Key::AltPageDown,
551 => Key::AltShiftPageDown,
552 => Key::CtrlPageDown,
553 => Key::CtrlShiftPageDown,
554 => Key::CtrlAltPageDown,
555 => Key::AltPageUp,
556 => Key::AltShiftPageUp,
557 => Key::CtrlPageUp,
558 => Key::CtrlShiftPageUp,
559 => Key::CtrlAltPageUp,
560 => Key::AltRight,
561 => Key::AltShiftRight,
562 => Key::CtrlRight,
563 => Key::CtrlShiftRight,
564 => Key::CtrlAltRight,
// 565?
566 => Key::AltUp,
567 => Key::AltShiftUp,
568 => Key::CtrlUp,
569 => Key::CtrlShiftUp,
570 => Key::CtrlAltUp,
ncurses::KEY_B2 => Key::NumpadCenter,
ncurses::KEY_DC => Key::Del,
ncurses::KEY_IC => Key::Ins,
@ -130,6 +223,8 @@ impl Key {
ncurses::KEY_SHOME => Key::ShiftHome,
ncurses::KEY_SEND => Key::ShiftEnd,
ncurses::KEY_SDC => Key::ShiftDel,
ncurses::KEY_SNEXT => Key::ShiftPageDown,
ncurses::KEY_SPREVIOUS => Key::ShiftPageUp,
// All Fn keys use the same enum with associated number
f @ ncurses::KEY_F1...ncurses::KEY_F12 => Key::F((f - ncurses::KEY_F0) as u8),
f @ 277...288 => Key::ShiftF((f - 281 + 5) as u8),
@ -159,44 +254,87 @@ impl fmt::Display for Key {
"{}",
match key {
Key::NumpadCenter => "Numpad center",
Key::Backspace => "Backspace",
Key::Enter => "Enter",
Key::Tab => "Tab",
Key::ShiftTab => "Shift-Tab",
Key::PageUp => "PageUp",
Key::ShiftPageUp => "Shift-PageUp",
Key::AltPageUp => "Alt-PageUp",
Key::AltShiftPageUp => "Alt-Shift-PageUp",
Key::CtrlPageUp => "Ctrl-PageUp",
Key::CtrlShiftPageUp => "Ctrl-Shift-PageUp",
Key::CtrlAltPageUp => "Ctrl-Alt-PageUp",
Key::PageDown => "PageDown",
Key::ShiftPageDown => "Shift-PageDown",
Key::AltPageDown => "Alt-PageDown",
Key::AltShiftPageDown => "Alt-Shift-PageDown",
Key::CtrlPageDown => "Ctrl-PageDown",
Key::CtrlShiftPageDown => "Ctrl-Shift-PageDown",
Key::CtrlAltPageDown => "Ctrl-Alt-PageDown",
Key::Left => "Left",
Key::Right => "Right",
Key::Down => "Down",
Key::Up => "Up",
Key::CtrlShiftLeft => "Ctrl-Shift-Left",
Key::CtrlShiftRight => "Ctrl-Shift-Right",
Key::CtrlShiftUp => "Ctrl-Shift-Up",
Key::CtrlShiftDown => "Ctrl-Shift-Down",
Key::ShiftUp => "Shift-Up",
Key::ShiftDown => "Shift-Down",
Key::ShiftLeft => "Shift-Left",
Key::AltLeft => "Alt-Left",
Key::AltShiftLeft => "Alt-Shift-Left",
Key::CtrlLeft => "Ctrl-Left",
Key::CtrlShiftLeft => "Ctrl-Shift-Left",
Key::CtrlAltLeft => "Ctrl-Alt-Left",
Key::Right => "Right",
Key::ShiftRight => "Shift-Right",
Key::AltRight => "Alt-Right",
Key::AltShiftRight => "Alt-Shift-Right",
Key::CtrlRight => "Ctrl-Right",
Key::CtrlShiftRight => "Ctrl-Shift-Right",
Key::CtrlAltRight => "Ctrl-Alt-Right",
Key::Down => "Down",
Key::ShiftDown => "Shift-Down",
Key::AltDown => "Alt-Down",
Key::AltShiftDown => "Alt-Shift-Down",
Key::CtrlDown => "Ctrl-Down",
Key::CtrlShiftDown => "Ctrl-Shift-Down",
Key::CtrlAltDown => "Ctrl-Alt-Down",
Key::Up => "Up",
Key::ShiftUp => "Shift-Up",
Key::AltUp => "Alt-Up",
Key::AltShiftUp => "Alt-Shift-Up",
Key::CtrlUp => "Ctrl-Up",
Key::CtrlShiftUp => "Ctrl-Shift-Up",
Key::CtrlAltUp => "Ctrl-Alt-Up",
Key::Del => "Del",
Key::ShiftDel => "Shift-Del",
Key::AltDel => "Alt-Del",
Key::AltShiftDel => "Alt-Shift-Del",
Key::CtrlDel => "Ctrl-Del",
Key::CtrlShiftDel => "Ctrl-Shift-Del",
Key::CtrlLeft => "Ctrl-Left",
Key::CtrlRight => "Ctrl-Right",
Key::CtrlUp => "Ctrl-Up",
Key::CtrlDown => "Ctrl-Down",
Key::CtrlPageUp => "Ctrl-PageUp",
Key::CtrlPageDown => "Ctrl-PageDown",
Key::PageUp => "PageUp",
Key::PageDown => "PageDown",
Key::Home => "Home",
Key::ShiftHome => "Shift-Home",
Key::AltHome => "Alt-Home",
Key::AltShiftHome => "Alt-Shift-Home",
Key::CtrlHome => "Ctrl-Home",
Key::CtrlShiftHome => "Ctrl-Shift-Home",
Key::CtrlAltHome => "Ctrl-Alt-Home",
Key::End => "End",
Key::ShiftEnd => "Shift-End",
Key::AltEnd => "Alt-End",
Key::AltShiftEnd => "Alt-Shift-End",
Key::CtrlEnd => "Ctrl-End",
Key::CtrlShiftEnd => "Ctrl-Shift-End",
Key::Backspace => "Backspace",
Key::Del => "Del",
Key::Enter => "Enter",
Key::ShiftTab => "Shift-Tab",
Key::Tab => "Tab",
Key::CtrlAltEnd => "Ctrl-Alt-End",
Key::Ins => "Ins",
Key::AltIns => "Alt-Ins",
Key::CtrlIns => "Ctrl-Ins",
Key::CtrlAltIns => "Ctrl-Alt-Ins",
Key::Esc => "Esc",
_ => "Missing key label",
})