Parse input counts: 10w, etc.

pull/8/head
Blaž Hrastnik 4 years ago
parent 5e73f83efa
commit de5170dcda

@ -11,7 +11,7 @@
- [ ] selection mode
- [x] % for whole doc selection
- [x] vertical splits
- [ ] input counts (30j)
- [x] input counts (30j)
- [ ] respect view fullscreen flag
- [ ] retain horiz when moving vertically
- [ ] update lsp on redo/undo

@ -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,6 +333,21 @@ impl Component for EditorView {
}
}
mode => {
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);
@ -340,6 +355,8 @@ impl Component for EditorView {
}
}
}
}
}
// appease borrowck
let callback = cxt.callback.take();

@ -10,6 +10,7 @@ pub struct Editor {
pub tree: Tree,
// pub documents: Vec<Document>,
pub should_close: bool,
pub count: Option<usize>,
pub theme: Theme, // TODO: share one instance
pub language_servers: helix_lsp::Registry,
}
@ -25,6 +26,7 @@ impl Editor {
Self {
tree: Tree::new(area),
should_close: false,
count: None,
theme,
language_servers,
}

Loading…
Cancel
Save