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
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.
* **Shift+keypress**: All characters keys (letters, numbers and punctuation) should work as expected.
* **UTF-8**: UTF-8 input should work fine in a unicode-enabled terminal emulator, but raw linux TTY may be more capricious.
* **Control codes**:
* The `key_codes` example can be a useful tool to see how the library reacts to various key presses.
* Keep in mind that if the terminal has shortcuts registered, they probably won't be transmitted to the app.
* UTF-8 input should work fine in a unicode-enabled terminal emulator, but raw linux TTY may be more capricious.
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
----------

View File

@ -35,13 +35,18 @@ pub enum Key {
PageDown,
Backspace,
Home,
ShiftHome,
CtrlHome,
CtrlShiftHome,
End,
ShiftEnd,
CtrlEnd,
CtrlShiftEnd,
/// Delete key
Del,
ShiftDel,
CtrlDel,
CtrlShiftDel,
/// Insert key
Ins,
CtrlIns,
@ -55,6 +60,8 @@ pub enum Key {
ShiftRight,
CtrlShiftLeft,
CtrlShiftRight,
CtrlShiftUp,
CtrlShiftDown,
CtrlLeft,
CtrlRight,
CtrlUp,
@ -82,9 +89,13 @@ impl Key {
127 | ncurses::KEY_BACKSPACE => Key::Backspace,
// 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,
@ -93,6 +104,7 @@ impl Key {
556 => Key::CtrlRight,
557 => Key::CtrlShiftRight,
562 => Key::CtrlUp,
563 => Key::CtrlShiftUp,
ncurses::KEY_DC => Key::Del,
ncurses::KEY_IC => Key::Ins,
ncurses::KEY_BTAB => Key::ShiftTab,
@ -106,6 +118,8 @@ impl Key {
ncurses::KEY_NPAGE => Key::PageDown,
ncurses::KEY_HOME => Key::Home,
ncurses::KEY_END => Key::End,
ncurses::KEY_SHOME => Key::ShiftHome,
ncurses::KEY_SEND => Key::ShiftEnd,
ncurses::KEY_SDC => Key::ShiftDel,
// 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),
@ -138,10 +152,13 @@ impl fmt::Display for Key {
Key::Up => "Up",
Key::CtrlShiftLeft => "Ctrl-Shift-Left",
Key::CtrlShiftRight => "Ctrl-Shift-Right",
Key::CtrlShiftUp => "Ctrl-Shift-Up",
Key::CtrlShiftDown => "Ctrl-Shift-Down",
Key::ShiftLeft => "Shift-Left",
Key::ShiftRight => "Shift-Right",
Key::ShiftDel => "Shift-Del",
Key::CtrlDel => "Ctrl-Del",
Key::CtrlShiftDel => "Ctrl-Shift-Del",
Key::CtrlLeft => "Ctrl-Left",
Key::CtrlRight => "Ctrl-Right",
Key::CtrlUp => "Ctrl-Up",
@ -151,9 +168,13 @@ impl fmt::Display for Key {
Key::PageUp => "PageUp",
Key::PageDown => "PageDown",
Key::Home => "Home",
Key::ShiftHome => "Shift-Home",
Key::CtrlHome => "Ctrl-Home",
Key::CtrlShiftHome => "Ctrl-Shift-Home",
Key::End => "End",
Key::ShiftEnd => "Shift-End",
Key::CtrlEnd => "Ctrl-End",
Key::CtrlShiftEnd => "Ctrl-Shift-End",
Key::Backspace => "Backspace",
Key::Del => "Del",
Key::Enter => "Enter",