mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-24 01:46:31 +00:00
Add input support for more keys
Shift and Ctrl Function keys Shift-Del
This commit is contained in:
parent
e07a0319f2
commit
00b75a98f6
39
src/event.rs
39
src/event.rs
@ -38,6 +38,8 @@ pub enum Key {
|
|||||||
End,
|
End,
|
||||||
/// Delete key
|
/// Delete key
|
||||||
Del,
|
Del,
|
||||||
|
ShiftDel,
|
||||||
|
CtrlDel,
|
||||||
/// Insert key
|
/// Insert key
|
||||||
Ins,
|
Ins,
|
||||||
/// Escape key. Often buffered by the terminal,
|
/// Escape key. Often buffered by the terminal,
|
||||||
@ -48,14 +50,16 @@ pub enum Key {
|
|||||||
CtrlPageDown,
|
CtrlPageDown,
|
||||||
ShiftLeft,
|
ShiftLeft,
|
||||||
ShiftRight,
|
ShiftRight,
|
||||||
ShiftCtrlLeft,
|
CtrlShiftLeft,
|
||||||
ShiftCtrlRight,
|
CtrlShiftRight,
|
||||||
CtrlLeft,
|
CtrlLeft,
|
||||||
CtrlRight,
|
CtrlRight,
|
||||||
CtrlUp,
|
CtrlUp,
|
||||||
CtrlDown,
|
CtrlDown,
|
||||||
CtrlDel,
|
|
||||||
F(u8),
|
F(u8),
|
||||||
|
CtrlF(u8),
|
||||||
|
ShiftF(u8),
|
||||||
|
CtrlShiftF(u8),
|
||||||
CtrlChar(char),
|
CtrlChar(char),
|
||||||
Unknown(i32),
|
Unknown(i32),
|
||||||
}
|
}
|
||||||
@ -63,22 +67,27 @@ pub enum Key {
|
|||||||
impl Key {
|
impl Key {
|
||||||
pub fn from_ncurses(ch: i32) -> Self {
|
pub fn from_ncurses(ch: i32) -> Self {
|
||||||
match ch {
|
match ch {
|
||||||
|
// Tab is '\t'
|
||||||
9 => Key::Tab,
|
9 => Key::Tab,
|
||||||
// Treat Return and the numpad Enter the same
|
// Treat '\n' and the numpad Enter the same
|
||||||
10 | ncurses::KEY_ENTER => Key::Enter,
|
10 | ncurses::KEY_ENTER => Key::Enter,
|
||||||
|
// This is the escape key when pressed by itself.
|
||||||
|
// When used for control sequences, it should have been caught earlier.
|
||||||
27 => Key::Esc,
|
27 => Key::Esc,
|
||||||
|
// `Backspace` sends 127, but Ctrl-H sends `Backspace`
|
||||||
127 | ncurses::KEY_BACKSPACE => Key::Backspace,
|
127 | ncurses::KEY_BACKSPACE => Key::Backspace,
|
||||||
|
// Del and Ins currently use a bad value in ncurses-rs
|
||||||
330 => Key::Del,
|
330 => Key::Del,
|
||||||
331 => Key::Ins,
|
331 => Key::Ins,
|
||||||
// Those keys don't seem to be documented...
|
// Those keys don't seem to be documented...
|
||||||
515 => Key::CtrlDel,
|
515 => Key::CtrlDel,
|
||||||
521 => Key::CtrlDown,
|
521 => Key::CtrlDown,
|
||||||
541 => Key::CtrlLeft,
|
541 => Key::CtrlLeft,
|
||||||
542 => Key::ShiftCtrlLeft,
|
542 => Key::CtrlShiftLeft,
|
||||||
546 => Key::CtrlPageDown,
|
546 => Key::CtrlPageDown,
|
||||||
551 => Key::CtrlPageUp,
|
551 => Key::CtrlPageUp,
|
||||||
556 => Key::CtrlRight,
|
556 => Key::CtrlRight,
|
||||||
557 => Key::ShiftCtrlRight,
|
557 => Key::CtrlShiftRight,
|
||||||
562 => Key::CtrlUp,
|
562 => Key::CtrlUp,
|
||||||
ncurses::KEY_BTAB => Key::ShiftTab,
|
ncurses::KEY_BTAB => Key::ShiftTab,
|
||||||
ncurses::KEY_SLEFT => Key::ShiftLeft,
|
ncurses::KEY_SLEFT => Key::ShiftLeft,
|
||||||
@ -91,7 +100,15 @@ 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_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),
|
f @ ncurses::KEY_F1 ... ncurses::KEY_F15 => Key::F((f - ncurses::KEY_F0) as u8),
|
||||||
|
f @ 281 ... 291 => Key::ShiftF((f - 281 + 5) as u8),
|
||||||
|
f @ 293 ... 303 => Key::CtrlF((f - 293 + 5) as u8),
|
||||||
|
f @ 305 ... 315 => Key::CtrlShiftF((f - 305 + 5) as u8),
|
||||||
|
// Shift and Ctrl F{1-4} need escape sequences...
|
||||||
|
|
||||||
|
// TODO: shift and ctrl Fn keys
|
||||||
// Avoids 8-10 (H,I,J), they are used by other commands.
|
// Avoids 8-10 (H,I,J), they are used by other commands.
|
||||||
c @ 1 ... 7 | c @ 11 ... 25 => Key::CtrlChar(('a' as u8 + (c-1) as u8) as char),
|
c @ 1 ... 7 | c @ 11 ... 25 => Key::CtrlChar(('a' as u8 + (c-1) as u8) as char),
|
||||||
_ => Key::Unknown(ch),
|
_ => Key::Unknown(ch),
|
||||||
@ -105,15 +122,19 @@ impl fmt::Display for Key {
|
|||||||
Key::Unknown(ch) => write!(f, "Unknown: {}", ch),
|
Key::Unknown(ch) => write!(f, "Unknown: {}", ch),
|
||||||
Key::CtrlChar(ch) => write!(f, "Ctrl-{}", ch),
|
Key::CtrlChar(ch) => write!(f, "Ctrl-{}", ch),
|
||||||
Key::F(n) => write!(f, "F{}", n),
|
Key::F(n) => write!(f, "F{}", n),
|
||||||
|
Key::ShiftF(n) => write!(f, "Shift-F{}", n),
|
||||||
|
Key::CtrlF(n) => write!(f, "Ctrl-F{}", n),
|
||||||
|
Key::CtrlShiftF(n) => write!(f, "Ctrl-Shift-F{}", n),
|
||||||
key => write!(f, "{}", match key {
|
key => write!(f, "{}", match key {
|
||||||
Key::Left => "Left",
|
Key::Left => "Left",
|
||||||
Key::Right => "Right",
|
Key::Right => "Right",
|
||||||
Key::Down => "Down",
|
Key::Down => "Down",
|
||||||
Key::Up => "Up",
|
Key::Up => "Up",
|
||||||
Key::ShiftCtrlLeft => "Shift-Ctrl-Left",
|
Key::CtrlShiftLeft => "Ctrl-Shift-Left",
|
||||||
Key::ShiftCtrlRight => "Shift-Ctrl-Right",
|
Key::CtrlShiftRight => "Ctrl-Shift-Right",
|
||||||
Key::ShiftLeft => "Shift-Left",
|
Key::ShiftLeft => "Shift-Left",
|
||||||
Key::ShiftRight => "Shift-Right",
|
Key::ShiftRight => "Shift-Right",
|
||||||
|
Key::ShiftDel => "Shift-Del",
|
||||||
Key::CtrlDel => "Ctrl-Del",
|
Key::CtrlDel => "Ctrl-Del",
|
||||||
Key::CtrlLeft => "Ctrl-Left",
|
Key::CtrlLeft => "Ctrl-Left",
|
||||||
Key::CtrlRight => "Ctrl-Right",
|
Key::CtrlRight => "Ctrl-Right",
|
||||||
@ -132,7 +153,7 @@ impl fmt::Display for Key {
|
|||||||
Key::Tab => "Tab",
|
Key::Tab => "Tab",
|
||||||
Key::Ins => "Ins",
|
Key::Ins => "Ins",
|
||||||
Key::Esc => "Esc",
|
Key::Esc => "Esc",
|
||||||
_ => "",
|
_ => "Missing key label",
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user