Add some input support and updated readme

This commit is contained in:
Alexandre Bury 2015-06-06 15:05:01 -07:00
parent 5e13f00121
commit 3a1e40ed49
2 changed files with 43 additions and 5 deletions

View File

@ -63,11 +63,28 @@ Also, Cursive currently expects every codepoint to be a one-column character, so
### Input ### Input
The `key_codes` example can be a useful tool to see how the library reacts to various key presses. * The `key_codes` example can be a useful tool to see how the library reacts to various key presses.
* **Basic set**: All simple key press (without shift, alt or ctrl pressed) should work in all terminals. * Keep in mind that if the terminal has shortcuts registered, they probably won't be transmitted to the app.
* **Shift+keypress**: All characters keys (letters, numbers and punctuation) should work as expected. * UTF-8 input should work fine in a unicode-enabled terminal emulator, but raw linux TTY may be more capricious.
* **UTF-8**: UTF-8 input should work fine in a unicode-enabled terminal emulator, but raw linux TTY may be more capricious.
* **Control codes**: Here is the support table for input keys (All means Linux TTY and terminal emulators):
| | Key | Shift+Key | Ctrl+Key | Shift+Ctrl+Key |
|--------------------------|:----:|:----------------------:|:--------------------------:|:---------------:|
| Letters | All | All | All (except c,z,q,s,i,h,m) | None |
| Numbers | All | All | None (can crash the app) | None |
| Punctuation | All | All | None (can crash the app) | None |
| Enter, Esc | All | None | None | None |
| Left, Right arrow keys | All | VTE+Xterm | VTE+Xterm | VTE+Xterm |
| Up, Down arrow keys | All | Xterm | VTE+Xterm | Xterm |
| Ins | All | None (paste clipboard) | Xterm | None |
| Del | All | VTE+Xterm | VTE+Xterm | VTE+Xterm |
| Home, End | All | Xterm | Xterm | Xterm |
| PageUp, PageDown | All | None | Xterm | None |
| Fn keys: F1-F4 | All | None (WIP) | None (WIP) | None (WIP) |
| Fn keys: F5-F12 | All | VTE+Xterm (WIP) | VTE+Xterm (WIP) | VTE+Xterm (WIP) |
| PrtScn, ScrollLock | None | None | None | None |
| Window, Menu | None | None | None | None |
Contribute Contribute
---------- ----------

View File

@ -35,13 +35,18 @@ pub enum Key {
PageDown, PageDown,
Backspace, Backspace,
Home, Home,
ShiftHome,
CtrlHome, CtrlHome,
CtrlShiftHome,
End, End,
ShiftEnd,
CtrlEnd, CtrlEnd,
CtrlShiftEnd,
/// Delete key /// Delete key
Del, Del,
ShiftDel, ShiftDel,
CtrlDel, CtrlDel,
CtrlShiftDel,
/// Insert key /// Insert key
Ins, Ins,
CtrlIns, CtrlIns,
@ -55,6 +60,8 @@ pub enum Key {
ShiftRight, ShiftRight,
CtrlShiftLeft, CtrlShiftLeft,
CtrlShiftRight, CtrlShiftRight,
CtrlShiftUp,
CtrlShiftDown,
CtrlLeft, CtrlLeft,
CtrlRight, CtrlRight,
CtrlUp, CtrlUp,
@ -82,9 +89,13 @@ impl Key {
127 | ncurses::KEY_BACKSPACE => Key::Backspace, 127 | ncurses::KEY_BACKSPACE => Key::Backspace,
// Those keys don't seem to be documented... // Those keys don't seem to be documented...
515 => Key::CtrlDel, 515 => Key::CtrlDel,
516 => Key::CtrlShiftDel,
521 => Key::CtrlDown, 521 => Key::CtrlDown,
522 => Key::CtrlShiftDown,
526 => Key::CtrlEnd, 526 => Key::CtrlEnd,
527 => Key::CtrlShiftEnd,
531 => Key::CtrlHome, 531 => Key::CtrlHome,
532 => Key::CtrlShiftHome,
536 => Key::CtrlIns, 536 => Key::CtrlIns,
541 => Key::CtrlLeft, 541 => Key::CtrlLeft,
542 => Key::CtrlShiftLeft, 542 => Key::CtrlShiftLeft,
@ -93,6 +104,7 @@ impl Key {
556 => Key::CtrlRight, 556 => Key::CtrlRight,
557 => Key::CtrlShiftRight, 557 => Key::CtrlShiftRight,
562 => Key::CtrlUp, 562 => Key::CtrlUp,
563 => Key::CtrlShiftUp,
ncurses::KEY_DC => Key::Del, ncurses::KEY_DC => Key::Del,
ncurses::KEY_IC => Key::Ins, ncurses::KEY_IC => Key::Ins,
ncurses::KEY_BTAB => Key::ShiftTab, ncurses::KEY_BTAB => Key::ShiftTab,
@ -106,6 +118,8 @@ impl Key {
ncurses::KEY_NPAGE => Key::PageDown, ncurses::KEY_NPAGE => Key::PageDown,
ncurses::KEY_HOME => Key::Home, ncurses::KEY_HOME => Key::Home,
ncurses::KEY_END => Key::End, ncurses::KEY_END => Key::End,
ncurses::KEY_SHOME => Key::ShiftHome,
ncurses::KEY_SEND => Key::ShiftEnd,
ncurses::KEY_SDC => Key::ShiftDel, ncurses::KEY_SDC => Key::ShiftDel,
// All Fn keys use the same enum with associated number // All Fn keys use the same enum with associated number
f @ ncurses::KEY_F1 ... ncurses::KEY_F15 => Key::F((f - ncurses::KEY_F0) as u8), f @ ncurses::KEY_F1 ... ncurses::KEY_F15 => Key::F((f - ncurses::KEY_F0) as u8),
@ -138,10 +152,13 @@ impl fmt::Display for Key {
Key::Up => "Up", Key::Up => "Up",
Key::CtrlShiftLeft => "Ctrl-Shift-Left", Key::CtrlShiftLeft => "Ctrl-Shift-Left",
Key::CtrlShiftRight => "Ctrl-Shift-Right", Key::CtrlShiftRight => "Ctrl-Shift-Right",
Key::CtrlShiftUp => "Ctrl-Shift-Up",
Key::CtrlShiftDown => "Ctrl-Shift-Down",
Key::ShiftLeft => "Shift-Left", Key::ShiftLeft => "Shift-Left",
Key::ShiftRight => "Shift-Right", Key::ShiftRight => "Shift-Right",
Key::ShiftDel => "Shift-Del", Key::ShiftDel => "Shift-Del",
Key::CtrlDel => "Ctrl-Del", Key::CtrlDel => "Ctrl-Del",
Key::CtrlShiftDel => "Ctrl-Shift-Del",
Key::CtrlLeft => "Ctrl-Left", Key::CtrlLeft => "Ctrl-Left",
Key::CtrlRight => "Ctrl-Right", Key::CtrlRight => "Ctrl-Right",
Key::CtrlUp => "Ctrl-Up", Key::CtrlUp => "Ctrl-Up",
@ -151,9 +168,13 @@ impl fmt::Display for Key {
Key::PageUp => "PageUp", Key::PageUp => "PageUp",
Key::PageDown => "PageDown", Key::PageDown => "PageDown",
Key::Home => "Home", Key::Home => "Home",
Key::ShiftHome => "Shift-Home",
Key::CtrlHome => "Ctrl-Home", Key::CtrlHome => "Ctrl-Home",
Key::CtrlShiftHome => "Ctrl-Shift-Home",
Key::End => "End", Key::End => "End",
Key::ShiftEnd => "Shift-End",
Key::CtrlEnd => "Ctrl-End", Key::CtrlEnd => "Ctrl-End",
Key::CtrlShiftEnd => "Ctrl-Shift-End",
Key::Backspace => "Backspace", Key::Backspace => "Backspace",
Key::Del => "Del", Key::Del => "Del",
Key::Enter => "Enter", Key::Enter => "Enter",