From eafde55afcdf9dc4c17c6c97c1db472fc9ff9957 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Sat, 3 Aug 2024 00:08:47 +0200 Subject: add keymap for view and global --- src/widgets/sheetview/mod.rs | 116 +++++-------------------------------------- 1 file changed, 13 insertions(+), 103 deletions(-) (limited to 'src/widgets/sheetview/mod.rs') diff --git a/src/widgets/sheetview/mod.rs b/src/widgets/sheetview/mod.rs index 6bd8408..fe2aa5a 100644 --- a/src/widgets/sheetview/mod.rs +++ b/src/widgets/sheetview/mod.rs @@ -6,11 +6,12 @@ use ratatui::{ }; use crate::{ - config::{theme::view::bar::SheetViewBarTheme, GlobalConfig}, - cursor::CursorMove, + config::{keymap::ViewKeyMap, theme::view::bar::SheetViewBarTheme, GlobalConfig}, lua, - sheet::cell::Cell, - state::{view::{bar::SheetViewBarState, mode::Mode}, window::Window, GlobalState}, + state::{ + view::{bar::SheetViewBarState, mode::Mode}, + GlobalState, + }, }; use super::statusbar::StatusBar; @@ -31,108 +32,9 @@ impl SheetView { } } - fn set_mode(&self, mode: Mode) { - GlobalState::instance_mut().view.mode = mode; - } - - fn move_cursor(&self, cm: CursorMove) { - GlobalState::instance_mut() - .view - .cursor - .move_checked(cm) - } - - fn start_selection(&self) { - let mut state = GlobalState::instance_mut(); - state.view.selection_anchor = Some((state.view.cursor.y(), state.view.cursor.x())); - state.view.mode = Mode::Visual; - } - - fn stop_selection(&self) { - let mut state = GlobalState::instance_mut(); - state.view.selection_anchor = None; - state.view.mode = Mode::Normal; - } - - fn open_editor(&self) { - let mut state = GlobalState::instance_mut(); - state.editor.buffer.set_lines_from_string( - r#"require('neosheet') - .state - .view - .active:map(function(cell) - return "" -end)"#, - ); - state.set_focus(Window::Editor) - } - pub fn handle_key_event(&mut self, event: KeyEvent) { let mode = { GlobalState::instance().view.mode }; match mode { - Mode::Normal => match event.code { - KeyCode::Char('j') => self.move_cursor(CursorMove::Down(1)), - KeyCode::Char('k') => self.move_cursor(CursorMove::Up(1)), - KeyCode::Char('h') => self.move_cursor(CursorMove::Left(1)), - KeyCode::Char('l') => self.move_cursor(CursorMove::Right(1)), - KeyCode::Char('v') => self.start_selection(), - KeyCode::Char('s') => self.open_editor(), - KeyCode::Char(':') => { - self.set_mode(Mode::Command); - self.bar.set_input_mode(true); - } - KeyCode::Enter => { - self.set_mode(Mode::Insert); - self.bar.set_input_mode(true); - } - _ => {} - }, - Mode::Insert => match event.code { - KeyCode::Enter => { - let mut state = GlobalState::instance_mut(); - let lock = state.view.active_sheet().unwrap(); - let mut sheet = lock.write().unwrap(); - - state - .view - .selection_or_cursor() - .into_iter() - .for_each(|(r, c)| { - sheet.set_cell(r, c, { - let s = self.bar.input().unwrap(); - match s.parse() { - Ok(n) => Cell::Number(n), - Err(_) => Cell::String(s.to_string()), - } - }) - }); - - state.view.cancel_mode(); - self.bar.set_input_mode(false); - } - KeyCode::Esc => { - GlobalState::instance_mut().view.cancel_mode(); - self.bar.set_input_mode(false); - } - _ => self.bar.handle_keyevent(event), - }, - Mode::Visual => match event.code { - KeyCode::Char('j') => self.move_cursor(CursorMove::Down(1)), - KeyCode::Char('k') => self.move_cursor(CursorMove::Up(1)), - KeyCode::Char('h') => self.move_cursor(CursorMove::Left(1)), - KeyCode::Char('l') => self.move_cursor(CursorMove::Right(1)), - KeyCode::Char('v') | KeyCode::Esc => self.stop_selection(), - KeyCode::Char('s') => self.open_editor(), - KeyCode::Char(':') => { - self.set_mode(Mode::Command); - self.bar.set_input_mode(true); - } - KeyCode::Enter => { - self.set_mode(Mode::Insert); - self.bar.set_input_mode(true); - } - _ => {} - }, Mode::Command => match event.code { KeyCode::Enter => { if let Err(_error) = lua::get().load(self.bar.input().unwrap_or("")).exec() { @@ -148,6 +50,14 @@ end)"#, } _ => self.bar.handle_keyevent(event), }, + _ => { + ViewKeyMap::handle(event); + + let mode = { GlobalState::instance().view.mode }; + if let Mode::Command = mode { + self.bar.set_input_mode(true) + } + } } } } -- cgit v1.2.3-70-g09d2