summaryrefslogtreecommitdiff
path: root/src/widgets/sheetview
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/sheetview')
-rw-r--r--src/widgets/sheetview/mod.rs48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/widgets/sheetview/mod.rs b/src/widgets/sheetview/mod.rs
index 7b539ea..fa11d1d 100644
--- a/src/widgets/sheetview/mod.rs
+++ b/src/widgets/sheetview/mod.rs
@@ -12,6 +12,7 @@ use crate::{
config::{theme::style, GlobalConfig},
lua,
sheet::{
+ cell::Cell,
eval::EvalFunction,
register::{Register, SheetId},
Sheet,
@@ -163,9 +164,50 @@ impl SheetView {
self.mode = SheetViewMode::Command;
self.bar.set_input_mode(true)
}
+ KeyCode::Enter => {
+ self.mode = SheetViewMode::Insert;
+ self.bar.set_input_mode(true);
+ }
_ => {}
},
- SheetViewMode::Insert => {}
+ SheetViewMode::Insert => match event.code {
+ KeyCode::Enter => {
+ let lock = Register::get(self.sheet).unwrap();
+ let mut sheet = lock.write().unwrap();
+
+ if let Some(_) = self.selection_anchor {
+ self.selection().iter().map(|(r, c)| (*r, *c)).collect()
+ } else {
+ vec![self.cursor]
+ }
+ .into_iter()
+ .for_each(|(r, c)| {
+ sheet.set_cell(r as usize, c as usize, {
+ let s = self.bar.input().unwrap();
+ match s.parse() {
+ Ok(n) => Cell::Number(n),
+ Err(_) => Cell::String(s.to_string()),
+ }
+ })
+ });
+
+ self.bar.set_input_mode(false);
+ if self.selection_anchor.is_some() {
+ self.mode = SheetViewMode::Visual;
+ } else {
+ self.mode = SheetViewMode::Normal;
+ }
+ }
+ KeyCode::Esc => {
+ if self.selection_anchor.is_some() {
+ self.mode = SheetViewMode::Visual;
+ } else {
+ self.mode = SheetViewMode::Normal;
+ }
+ self.bar.set_input_mode(false);
+ }
+ _ => self.bar.handle_keyevent(event),
+ },
SheetViewMode::Visual => match event.code {
KeyCode::Char('j') => self.move_cursor_by((1, 0)),
KeyCode::Char('k') => self.move_cursor_by((-1, 0)),
@@ -183,6 +225,10 @@ impl SheetView {
self.mode = SheetViewMode::Command;
self.bar.set_input_mode(true)
}
+ KeyCode::Enter => {
+ self.mode = SheetViewMode::Insert;
+ self.bar.set_input_mode(true);
+ }
_ => {}
},
SheetViewMode::Command => match event.code {