Migrate keybind handling to State::on_key()
This commit is contained in:
parent
878f47c7e9
commit
3020d14081
33
src/main.rs
33
src/main.rs
|
@ -33,7 +33,6 @@ use crossterm::{
|
||||||
event::{Event, KeyCode, KeyEvent},
|
event::{Event, KeyCode, KeyEvent},
|
||||||
terminal, QueueableCommand, Result,
|
terminal, QueueableCommand, Result,
|
||||||
};
|
};
|
||||||
use keybinds::Keybind;
|
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use ropey::Rope;
|
use ropey::Rope;
|
||||||
use yacexits::{exit, EX_DATAERR, EX_UNAVAILABLE};
|
use yacexits::{exit, EX_DATAERR, EX_UNAVAILABLE};
|
||||||
|
@ -46,6 +45,7 @@ mod theme;
|
||||||
|
|
||||||
use buffer::Buffer;
|
use buffer::Buffer;
|
||||||
use config::Config;
|
use config::Config;
|
||||||
|
use keybinds::{Key, Keybind};
|
||||||
use theme::StyleStore;
|
use theme::StyleStore;
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Default)]
|
#[derive(Copy, Clone, Debug, Default)]
|
||||||
|
@ -274,9 +274,7 @@ impl State {
|
||||||
fn on_visual_event(&mut self, event: Event) {
|
fn on_visual_event(&mut self, event: Event) {
|
||||||
match event {
|
match event {
|
||||||
Event::Key(KeyEvent { code, .. }) => {
|
Event::Key(KeyEvent { code, .. }) => {
|
||||||
if let Some(keybind) = self.config.keybinds.visual.map.get(&code) {
|
self.on_key(code);
|
||||||
self.execute_keybind(keybind.clone());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
event => self.on_any_event(event),
|
event => self.on_any_event(event),
|
||||||
}
|
}
|
||||||
|
@ -284,19 +282,38 @@ impl State {
|
||||||
|
|
||||||
fn on_insert_event(&mut self, event: Event, _state: InsertState) {
|
fn on_insert_event(&mut self, event: Event, _state: InsertState) {
|
||||||
match event {
|
match event {
|
||||||
Event::Key(KeyEvent { code, .. }) => match self.config.keybinds.insert.map.get(&code) {
|
Event::Key(KeyEvent { code, .. }) => {
|
||||||
Some(keybind) => self.execute_keybind(keybind.clone()),
|
if !self.on_key(code) {
|
||||||
None => {
|
|
||||||
if let KeyCode::Char(c) = code {
|
if let KeyCode::Char(c) = code {
|
||||||
self.buffer.insert_char(self.cursor, c);
|
self.buffer.insert_char(self.cursor, c);
|
||||||
self.move_cursor(Direction::Right);
|
self.move_cursor(Direction::Right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
event => self.on_any_event(event),
|
event => self.on_any_event(event),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Processes a key press event.
|
||||||
|
///
|
||||||
|
/// Returns `true` if the key was handled by a keybind, `false` otherwise.
|
||||||
|
fn on_key(&mut self, key: Key) -> bool {
|
||||||
|
let keybinds = match &self.mode {
|
||||||
|
Mode::Normal(_) => &self.config.keybinds.normal,
|
||||||
|
Mode::Insert(_) => &self.config.keybinds.insert,
|
||||||
|
Mode::Visual => &self.config.keybinds.visual,
|
||||||
|
Mode::Command(_) => return false, // command mode is handled in [on_command_event]
|
||||||
|
};
|
||||||
|
|
||||||
|
match keybinds.map.get(&key) {
|
||||||
|
None => false,
|
||||||
|
Some(keybind) => {
|
||||||
|
self.execute_keybind(keybind.clone());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn on_any_event(&mut self, event: Event) {
|
fn on_any_event(&mut self, event: Event) {
|
||||||
match event {
|
match event {
|
||||||
Event::Resize(cols, rows) => {
|
Event::Resize(cols, rows) => {
|
||||||
|
|
Loading…
Reference in New Issue