Parse input counts: 10w, etc.

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

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

@ -9,7 +9,7 @@ use std::borrow::Cow;
use crossterm::{ use crossterm::{
cursor, cursor,
event::{read, Event, EventStream, KeyCode, KeyEvent}, event::{read, Event, EventStream, KeyCode, KeyEvent, KeyModifiers},
}; };
use tui::{ use tui::{
backend::CrosstermBackend, backend::CrosstermBackend,
@ -333,10 +333,27 @@ impl Component for EditorView {
} }
} }
mode => { mode => {
if let Some(command) = self.keymap[&mode].get(&keys) { match keys.as_slice() {
command(&mut cxt); &[KeyEvent {
code: KeyCode::Char(i @ '0'..='9'),
// TODO: simplistic ensure cursor in view for now 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
}
}
} }
} }
} }

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

Loading…
Cancel
Save