Skip to content

Commit 83686f1

Browse files
committed
Extract map_keybindings
1 parent 3d63f7f commit 83686f1

File tree

3 files changed

+59
-52
lines changed

3 files changed

+59
-52
lines changed

src/input.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ mod event_provider;
1414
mod input_options;
1515
mod key_bindings;
1616
mod key_event;
17+
mod map_keybindings;
1718
mod standard_event;
1819
mod thread;
1920

@@ -24,8 +25,9 @@ pub(crate) use self::{
2425
event_handler::EventHandler,
2526
event_provider::{read_event, EventReaderFn},
2627
input_options::InputOptions,
27-
key_bindings::{map_keybindings, KeyBindings},
28+
key_bindings::KeyBindings,
2829
key_event::KeyEvent,
30+
map_keybindings::map_keybindings,
2931
standard_event::StandardEvent,
3032
thread::{State, Thread, THREAD_NAME},
3133
};

src/input/key_bindings.rs

Lines changed: 3 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::input::{Event, KeyCode, KeyEvent, KeyModifiers};
1+
use crate::input::{map_keybindings, Event};
22

33
/// Represents a mapping between an input event and an action.
44
#[derive(Debug)]
@@ -100,56 +100,6 @@ pub(crate) struct KeyBindings {
100100
pub(crate) fixup_keep_message_with_editor: Vec<Event>,
101101
}
102102

103-
/// Map a keybinding to a list of events.
104-
#[must_use]
105-
#[allow(clippy::string_slice, clippy::missing_panics_doc)]
106-
pub(crate) fn map_keybindings(bindings: &[String]) -> Vec<Event> {
107-
bindings
108-
.iter()
109-
.map(|b| {
110-
let mut key = String::from(b);
111-
let mut modifiers = KeyModifiers::empty();
112-
if key.contains("Control") {
113-
key = key.replace("Control", "");
114-
modifiers.insert(KeyModifiers::CONTROL);
115-
}
116-
if key.contains("Alt") {
117-
key = key.replace("Alt", "");
118-
modifiers.insert(KeyModifiers::ALT);
119-
}
120-
if key.contains("Shift") {
121-
key = key.replace("Shift", "");
122-
modifiers.insert(KeyModifiers::SHIFT);
123-
}
124-
125-
let code = match key.as_str() {
126-
"Backspace" => KeyCode::Backspace,
127-
"BackTab" => KeyCode::BackTab,
128-
"Delete" => KeyCode::Delete,
129-
"Down" => KeyCode::Down,
130-
"End" => KeyCode::End,
131-
"Enter" => KeyCode::Enter,
132-
"Esc" => KeyCode::Esc,
133-
"Home" => KeyCode::Home,
134-
"Insert" => KeyCode::Insert,
135-
"Left" => KeyCode::Left,
136-
"PageDown" => KeyCode::PageDown,
137-
"PageUp" => KeyCode::PageUp,
138-
"Right" => KeyCode::Right,
139-
"Tab" => KeyCode::Tab,
140-
"Up" => KeyCode::Up,
141-
// assume that this is an F key
142-
k if k.len() > 1 => {
143-
let key_number = k[1..].parse::<u8>().unwrap_or(1);
144-
KeyCode::F(key_number)
145-
},
146-
k => KeyCode::Char(k.chars().next().expect("Expected only one character from Char KeyCode")),
147-
};
148-
Event::Key(KeyEvent::new(code, modifiers))
149-
})
150-
.collect()
151-
}
152-
153103
impl KeyBindings {
154104
/// Create a new instance from the configuration keybindings.
155105
#[must_use]
@@ -206,9 +156,11 @@ impl KeyBindings {
206156

207157
#[cfg(test)]
208158
mod tests {
159+
use crossterm::event::{KeyCode, KeyModifiers};
209160
use rstest::rstest;
210161

211162
use super::*;
163+
use crate::input::KeyEvent;
212164

213165
#[test]
214166
fn new() {

src/input/map_keybindings.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use crossterm::event::{KeyCode, KeyModifiers};
2+
3+
use crate::input::{Event, KeyEvent};
4+
5+
/// Map a keybinding to a list of events.
6+
#[must_use]
7+
#[allow(clippy::string_slice, clippy::missing_panics_doc)]
8+
pub(crate) fn map_keybindings(bindings: &[String]) -> Vec<Event> {
9+
bindings
10+
.iter()
11+
.map(|b| {
12+
let mut key = String::from(b);
13+
let mut modifiers = KeyModifiers::empty();
14+
if key.contains("Control") {
15+
key = key.replace("Control", "");
16+
modifiers.insert(KeyModifiers::CONTROL);
17+
}
18+
if key.contains("Alt") {
19+
key = key.replace("Alt", "");
20+
modifiers.insert(KeyModifiers::ALT);
21+
}
22+
if key.contains("Shift") {
23+
key = key.replace("Shift", "");
24+
modifiers.insert(KeyModifiers::SHIFT);
25+
}
26+
27+
let code = match key.as_str() {
28+
"Backspace" => KeyCode::Backspace,
29+
"BackTab" => KeyCode::BackTab,
30+
"Delete" => KeyCode::Delete,
31+
"Down" => KeyCode::Down,
32+
"End" => KeyCode::End,
33+
"Enter" => KeyCode::Enter,
34+
"Esc" => KeyCode::Esc,
35+
"Home" => KeyCode::Home,
36+
"Insert" => KeyCode::Insert,
37+
"Left" => KeyCode::Left,
38+
"PageDown" => KeyCode::PageDown,
39+
"PageUp" => KeyCode::PageUp,
40+
"Right" => KeyCode::Right,
41+
"Tab" => KeyCode::Tab,
42+
"Up" => KeyCode::Up,
43+
// assume that this is an F key
44+
k if k.len() > 1 => {
45+
let key_number = k[1..].parse::<u8>().unwrap_or(1);
46+
KeyCode::F(key_number)
47+
},
48+
k => KeyCode::Char(k.chars().next().expect("Expected only one character from Char KeyCode")),
49+
};
50+
Event::Key(KeyEvent::new(code, modifiers))
51+
})
52+
.collect()
53+
}

0 commit comments

Comments
 (0)