aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src')
-rw-r--r--helix-term/src/ui/editor.rs27
1 files changed, 22 insertions, 5 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 79e6ed93..2892e2e5 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -9,7 +9,7 @@ use std::borrow::Cow;
use crossterm::{
cursor,
- event::{read, Event, EventStream, KeyCode, KeyEvent},
+ event::{read, Event, EventStream, KeyCode, KeyEvent, KeyModifiers},
};
use tui::{
backend::CrosstermBackend,
@@ -333,10 +333,27 @@ impl Component for EditorView {
}
}
mode => {
- if let Some(command) = self.keymap[&mode].get(&keys) {
- command(&mut cxt);
-
- // TODO: simplistic ensure cursor in view for now
+ match keys.as_slice() {
+ &[KeyEvent {
+ code: KeyCode::Char(i @ '0'..='9'),
+ modifiers: KeyModifiers::NONE,
+ }] => {
+ let i = i.to_digit(10).unwrap() as usize;
+ cxt.editor.count = Some(cxt.editor.count.map_or(i, |c| c * 10 + i));
+ }
+ _ => {
+ // set the count
+ cxt.count = cxt.editor.count.take().unwrap_or(1);
+ // TODO: edge case: 0j -> reset to 1
+ // if this fails, count was Some(0)
+ // debug_assert!(cxt.count != 0);
+
+ if let Some(command) = self.keymap[&mode].get(&keys) {
+ command(&mut cxt);
+
+ // TODO: simplistic ensure cursor in view for now
+ }
+ }
}
}
}