зеркало из
https://github.com/glebtv/tui-textarea.git
synced 2026-09-08 00:15:50 +03:00
support shift/ctrl/alt + arrow keys combinations added at termion v4
fix #68
termion added the support at this commit:
3b52dc9bfb
Этот коммит содержится в:
@@ -17,6 +17,7 @@ impl From<KeyEvent> for Input {
|
|||||||
fn from(key: KeyEvent) -> Self {
|
fn from(key: KeyEvent) -> Self {
|
||||||
let mut ctrl = false;
|
let mut ctrl = false;
|
||||||
let mut alt = false;
|
let mut alt = false;
|
||||||
|
let mut shift = false;
|
||||||
let key = match key {
|
let key = match key {
|
||||||
KeyEvent::Char('\n' | '\r') => Key::Enter,
|
KeyEvent::Char('\n' | '\r') => Key::Enter,
|
||||||
KeyEvent::Char(c) => Key::Char(c),
|
KeyEvent::Char(c) => Key::Char(c),
|
||||||
@@ -30,9 +31,57 @@ impl From<KeyEvent> for Input {
|
|||||||
}
|
}
|
||||||
KeyEvent::Backspace => Key::Backspace,
|
KeyEvent::Backspace => Key::Backspace,
|
||||||
KeyEvent::Left => Key::Left,
|
KeyEvent::Left => Key::Left,
|
||||||
|
KeyEvent::ShiftLeft => {
|
||||||
|
shift = true;
|
||||||
|
Key::Left
|
||||||
|
}
|
||||||
|
KeyEvent::AltLeft => {
|
||||||
|
alt = true;
|
||||||
|
Key::Left
|
||||||
|
}
|
||||||
|
KeyEvent::CtrlLeft => {
|
||||||
|
ctrl = true;
|
||||||
|
Key::Left
|
||||||
|
}
|
||||||
KeyEvent::Right => Key::Right,
|
KeyEvent::Right => Key::Right,
|
||||||
|
KeyEvent::ShiftRight => {
|
||||||
|
shift = true;
|
||||||
|
Key::Right
|
||||||
|
}
|
||||||
|
KeyEvent::AltRight => {
|
||||||
|
alt = true;
|
||||||
|
Key::Right
|
||||||
|
}
|
||||||
|
KeyEvent::CtrlRight => {
|
||||||
|
ctrl = true;
|
||||||
|
Key::Right
|
||||||
|
}
|
||||||
KeyEvent::Up => Key::Up,
|
KeyEvent::Up => Key::Up,
|
||||||
|
KeyEvent::ShiftUp => {
|
||||||
|
shift = true;
|
||||||
|
Key::Up
|
||||||
|
}
|
||||||
|
KeyEvent::AltUp => {
|
||||||
|
alt = true;
|
||||||
|
Key::Up
|
||||||
|
}
|
||||||
|
KeyEvent::CtrlUp => {
|
||||||
|
ctrl = true;
|
||||||
|
Key::Up
|
||||||
|
}
|
||||||
KeyEvent::Down => Key::Down,
|
KeyEvent::Down => Key::Down,
|
||||||
|
KeyEvent::ShiftDown => {
|
||||||
|
shift = true;
|
||||||
|
Key::Down
|
||||||
|
}
|
||||||
|
KeyEvent::AltDown => {
|
||||||
|
alt = true;
|
||||||
|
Key::Down
|
||||||
|
}
|
||||||
|
KeyEvent::CtrlDown => {
|
||||||
|
ctrl = true;
|
||||||
|
Key::Down
|
||||||
|
}
|
||||||
KeyEvent::Home => Key::Home,
|
KeyEvent::Home => Key::Home,
|
||||||
KeyEvent::End => Key::End,
|
KeyEvent::End => Key::End,
|
||||||
KeyEvent::PageUp => Key::PageUp,
|
KeyEvent::PageUp => Key::PageUp,
|
||||||
@@ -48,7 +97,7 @@ impl From<KeyEvent> for Input {
|
|||||||
key,
|
key,
|
||||||
ctrl,
|
ctrl,
|
||||||
alt,
|
alt,
|
||||||
shift: false,
|
shift,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,6 +155,9 @@ mod tests {
|
|||||||
(KeyEvent::F(1), input(Key::F(1), false, false, false)),
|
(KeyEvent::F(1), input(Key::F(1), false, false, false)),
|
||||||
(KeyEvent::BackTab, input(Key::Tab, false, false, false)),
|
(KeyEvent::BackTab, input(Key::Tab, false, false, false)),
|
||||||
(KeyEvent::Null, input(Key::Null, false, false, false)),
|
(KeyEvent::Null, input(Key::Null, false, false, false)),
|
||||||
|
(KeyEvent::ShiftDown, input(Key::Down, false, false, true)),
|
||||||
|
(KeyEvent::AltUp, input(Key::Up, false, true, false)),
|
||||||
|
(KeyEvent::CtrlLeft, input(Key::Left, true, false, false)),
|
||||||
] {
|
] {
|
||||||
assert_eq!(Input::from(from), to, "{:?} -> {:?}", from, to);
|
assert_eq!(Input::from(from), to, "{:?} -> {:?}", from, to);
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user