4 /// Represents key modifiers (shift, control, alt).
5 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6 pub struct KeyModifiers: u8 {
7 const SHIFT = 0b0000_0001;
8 const CONTROL = 0b0000_0010;
9 const ALT = 0b0000_0100;
10 const NONE = 0b0000_0000;
14#[cfg(feature = "term")]
15impl From<KeyModifiers> for crossterm::event::KeyModifiers {
16 fn from(key_modifiers: KeyModifiers) -> Self {
17 use crossterm::event::KeyModifiers as CKeyModifiers;
19 let mut result = CKeyModifiers::NONE;
21 if key_modifiers.contains(KeyModifiers::SHIFT) {
22 result.insert(CKeyModifiers::SHIFT);
24 if key_modifiers.contains(KeyModifiers::CONTROL) {
25 result.insert(CKeyModifiers::CONTROL);
27 if key_modifiers.contains(KeyModifiers::ALT) {
28 result.insert(CKeyModifiers::ALT);
35#[cfg(feature = "term")]
36impl From<crossterm::event::KeyModifiers> for KeyModifiers {
37 fn from(val: crossterm::event::KeyModifiers) -> Self {
38 use crossterm::event::KeyModifiers as CKeyModifiers;
40 let mut result = KeyModifiers::NONE;
42 if val.contains(CKeyModifiers::SHIFT) {
43 result.insert(KeyModifiers::SHIFT);
45 if val.contains(CKeyModifiers::CONTROL) {
46 result.insert(KeyModifiers::CONTROL);
48 if val.contains(CKeyModifiers::ALT) {
49 result.insert(KeyModifiers::ALT);
57#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
58#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
90 /// `KeyCode::F(1)` represents F1 key, etc.
94 /// `KeyCode::Char('c')` represents `c` character, etc.
102#[cfg(feature = "term")]
103impl From<KeyCode> for crossterm::event::KeyCode {
104 fn from(key_code: KeyCode) -> Self {
105 use crossterm::event::KeyCode as CKeyCode;
108 KeyCode::Backspace => CKeyCode::Backspace,
109 KeyCode::Enter => CKeyCode::Enter,
110 KeyCode::Left => CKeyCode::Left,
111 KeyCode::Right => CKeyCode::Right,
112 KeyCode::Up => CKeyCode::Up,
113 KeyCode::Down => CKeyCode::Down,
114 KeyCode::Home => CKeyCode::Home,
115 KeyCode::End => CKeyCode::End,
116 KeyCode::PageUp => CKeyCode::PageUp,
117 KeyCode::PageDown => CKeyCode::PageDown,
118 KeyCode::Tab => CKeyCode::Tab,
119 KeyCode::BackTab => CKeyCode::BackTab,
120 KeyCode::Delete => CKeyCode::Delete,
121 KeyCode::Insert => CKeyCode::Insert,
122 KeyCode::F(f_number) => CKeyCode::F(f_number),
123 KeyCode::Char(character) => CKeyCode::Char(character),
124 KeyCode::Null => CKeyCode::Null,
125 KeyCode::Esc => CKeyCode::Esc,
130#[cfg(feature = "term")]
131impl From<crossterm::event::KeyCode> for KeyCode {
132 fn from(val: crossterm::event::KeyCode) -> Self {
133 use crossterm::event::KeyCode as CKeyCode;
136 CKeyCode::Backspace => KeyCode::Backspace,
137 CKeyCode::Enter => KeyCode::Enter,
138 CKeyCode::Left => KeyCode::Left,
139 CKeyCode::Right => KeyCode::Right,
140 CKeyCode::Up => KeyCode::Up,
141 CKeyCode::Down => KeyCode::Down,
142 CKeyCode::Home => KeyCode::Home,
143 CKeyCode::End => KeyCode::End,
144 CKeyCode::PageUp => KeyCode::PageUp,
145 CKeyCode::PageDown => KeyCode::PageDown,
146 CKeyCode::Tab => KeyCode::Tab,
147 CKeyCode::BackTab => KeyCode::BackTab,
148 CKeyCode::Delete => KeyCode::Delete,
149 CKeyCode::Insert => KeyCode::Insert,
150 CKeyCode::F(f_number) => KeyCode::F(f_number),
151 CKeyCode::Char(character) => KeyCode::Char(character),
152 CKeyCode::Null => KeyCode::Null,
153 CKeyCode::Esc => KeyCode::Esc,
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list