chore: format
This commit is contained in:
@ -235,9 +235,8 @@ impl Keymap {
|
||||
|
||||
/// Look up the binding for a key, falling through to parent keymaps.
|
||||
pub fn lookup(&self, key: KeyCode, mods: KeyModifiers) -> Option<&Binding> {
|
||||
self.lookup_local(key, mods).or_else(|| {
|
||||
self.parent.as_ref().and_then(|p| p.lookup(key, mods))
|
||||
})
|
||||
self.lookup_local(key, mods)
|
||||
.or_else(|| self.parent.as_ref().and_then(|p| p.lookup(key, mods)))
|
||||
}
|
||||
|
||||
/// Dispatch a key: look up binding, resolve through registry, return effects.
|
||||
@ -729,50 +728,82 @@ impl KeymapSet {
|
||||
|
||||
// ── Editing mode ─────────────────────────────────────────────────
|
||||
let mut ed = Keymap::new();
|
||||
ed.bind_seq(KeyCode::Esc, none, vec![
|
||||
("clear-buffer", vec!["edit".into()]),
|
||||
("enter-mode", vec!["normal".into()]),
|
||||
]);
|
||||
ed.bind_seq(KeyCode::Enter, none, vec![
|
||||
("commit-cell-edit", vec![]),
|
||||
("clear-buffer", vec!["edit".into()]),
|
||||
]);
|
||||
ed.bind_seq(KeyCode::Tab, none, vec![
|
||||
("commit-and-advance-right", vec![]),
|
||||
("clear-buffer", vec!["edit".into()]),
|
||||
]);
|
||||
ed.bind_seq(
|
||||
KeyCode::Esc,
|
||||
none,
|
||||
vec![
|
||||
("clear-buffer", vec!["edit".into()]),
|
||||
("enter-mode", vec!["normal".into()]),
|
||||
],
|
||||
);
|
||||
ed.bind_seq(
|
||||
KeyCode::Enter,
|
||||
none,
|
||||
vec![
|
||||
("commit-cell-edit", vec![]),
|
||||
("clear-buffer", vec!["edit".into()]),
|
||||
],
|
||||
);
|
||||
ed.bind_seq(
|
||||
KeyCode::Tab,
|
||||
none,
|
||||
vec![
|
||||
("commit-and-advance-right", vec![]),
|
||||
("clear-buffer", vec!["edit".into()]),
|
||||
],
|
||||
);
|
||||
ed.bind_args(KeyCode::Backspace, none, "pop-char", vec!["edit".into()]);
|
||||
ed.bind_any_char("append-char", vec!["edit".into()]);
|
||||
set.insert(ModeKey::Editing, Arc::new(ed));
|
||||
|
||||
// ── Formula edit ─────────────────────────────────────────────────
|
||||
let mut fe = Keymap::new();
|
||||
fe.bind_seq(KeyCode::Esc, none, vec![
|
||||
("clear-buffer", vec!["formula".into()]),
|
||||
("enter-mode", vec!["formula-panel".into()]),
|
||||
]);
|
||||
fe.bind_seq(KeyCode::Enter, none, vec![
|
||||
("commit-formula", vec![]),
|
||||
("clear-buffer", vec!["formula".into()]),
|
||||
]);
|
||||
fe.bind_seq(
|
||||
KeyCode::Esc,
|
||||
none,
|
||||
vec![
|
||||
("clear-buffer", vec!["formula".into()]),
|
||||
("enter-mode", vec!["formula-panel".into()]),
|
||||
],
|
||||
);
|
||||
fe.bind_seq(
|
||||
KeyCode::Enter,
|
||||
none,
|
||||
vec![
|
||||
("commit-formula", vec![]),
|
||||
("clear-buffer", vec!["formula".into()]),
|
||||
],
|
||||
);
|
||||
fe.bind_args(KeyCode::Backspace, none, "pop-char", vec!["formula".into()]);
|
||||
fe.bind_any_char("append-char", vec!["formula".into()]);
|
||||
set.insert(ModeKey::FormulaEdit, Arc::new(fe));
|
||||
|
||||
// ── Category add ─────────────────────────────────────────────────
|
||||
let mut ca = Keymap::new();
|
||||
ca.bind_seq(KeyCode::Esc, none, vec![
|
||||
("clear-buffer", vec!["category".into()]),
|
||||
("enter-mode", vec!["category-panel".into()]),
|
||||
]);
|
||||
ca.bind_seq(KeyCode::Enter, none, vec![
|
||||
("commit-category-add", vec![]),
|
||||
("clear-buffer", vec!["category".into()]),
|
||||
]);
|
||||
ca.bind_seq(KeyCode::Tab, none, vec![
|
||||
("commit-category-add", vec![]),
|
||||
("clear-buffer", vec!["category".into()]),
|
||||
]);
|
||||
ca.bind_seq(
|
||||
KeyCode::Esc,
|
||||
none,
|
||||
vec![
|
||||
("clear-buffer", vec!["category".into()]),
|
||||
("enter-mode", vec!["category-panel".into()]),
|
||||
],
|
||||
);
|
||||
ca.bind_seq(
|
||||
KeyCode::Enter,
|
||||
none,
|
||||
vec![
|
||||
("commit-category-add", vec![]),
|
||||
("clear-buffer", vec!["category".into()]),
|
||||
],
|
||||
);
|
||||
ca.bind_seq(
|
||||
KeyCode::Tab,
|
||||
none,
|
||||
vec![
|
||||
("commit-category-add", vec![]),
|
||||
("clear-buffer", vec!["category".into()]),
|
||||
],
|
||||
);
|
||||
ca.bind_args(
|
||||
KeyCode::Backspace,
|
||||
none,
|
||||
@ -784,46 +815,74 @@ impl KeymapSet {
|
||||
|
||||
// ── Item add ─────────────────────────────────────────────────────
|
||||
let mut ia = Keymap::new();
|
||||
ia.bind_seq(KeyCode::Esc, none, vec![
|
||||
("clear-buffer", vec!["item".into()]),
|
||||
("enter-mode", vec!["category-panel".into()]),
|
||||
]);
|
||||
ia.bind_seq(KeyCode::Enter, none, vec![
|
||||
("commit-item-add", vec![]),
|
||||
("clear-buffer", vec!["item".into()]),
|
||||
]);
|
||||
ia.bind_seq(KeyCode::Tab, none, vec![
|
||||
("commit-item-add", vec![]),
|
||||
("clear-buffer", vec!["item".into()]),
|
||||
]);
|
||||
ia.bind_seq(
|
||||
KeyCode::Esc,
|
||||
none,
|
||||
vec![
|
||||
("clear-buffer", vec!["item".into()]),
|
||||
("enter-mode", vec!["category-panel".into()]),
|
||||
],
|
||||
);
|
||||
ia.bind_seq(
|
||||
KeyCode::Enter,
|
||||
none,
|
||||
vec![
|
||||
("commit-item-add", vec![]),
|
||||
("clear-buffer", vec!["item".into()]),
|
||||
],
|
||||
);
|
||||
ia.bind_seq(
|
||||
KeyCode::Tab,
|
||||
none,
|
||||
vec![
|
||||
("commit-item-add", vec![]),
|
||||
("clear-buffer", vec!["item".into()]),
|
||||
],
|
||||
);
|
||||
ia.bind_args(KeyCode::Backspace, none, "pop-char", vec!["item".into()]);
|
||||
ia.bind_any_char("append-char", vec!["item".into()]);
|
||||
set.insert(ModeKey::ItemAdd, Arc::new(ia));
|
||||
|
||||
// ── Export prompt ────────────────────────────────────────────────
|
||||
let mut ep = Keymap::new();
|
||||
ep.bind_seq(KeyCode::Esc, none, vec![
|
||||
("clear-buffer", vec!["export".into()]),
|
||||
("enter-mode", vec!["normal".into()]),
|
||||
]);
|
||||
ep.bind_seq(KeyCode::Enter, none, vec![
|
||||
("commit-export", vec![]),
|
||||
("clear-buffer", vec!["export".into()]),
|
||||
]);
|
||||
ep.bind_seq(
|
||||
KeyCode::Esc,
|
||||
none,
|
||||
vec![
|
||||
("clear-buffer", vec!["export".into()]),
|
||||
("enter-mode", vec!["normal".into()]),
|
||||
],
|
||||
);
|
||||
ep.bind_seq(
|
||||
KeyCode::Enter,
|
||||
none,
|
||||
vec![
|
||||
("commit-export", vec![]),
|
||||
("clear-buffer", vec!["export".into()]),
|
||||
],
|
||||
);
|
||||
ep.bind_args(KeyCode::Backspace, none, "pop-char", vec!["export".into()]);
|
||||
ep.bind_any_char("append-char", vec!["export".into()]);
|
||||
set.insert(ModeKey::ExportPrompt, Arc::new(ep));
|
||||
|
||||
// ── Command mode ─────────────────────────────────────────────────
|
||||
let mut cm = Keymap::new();
|
||||
cm.bind_seq(KeyCode::Esc, none, vec![
|
||||
("clear-buffer", vec!["command".into()]),
|
||||
("enter-mode", vec!["normal".into()]),
|
||||
]);
|
||||
cm.bind_seq(KeyCode::Enter, none, vec![
|
||||
("execute-command", vec![]),
|
||||
("clear-buffer", vec!["command".into()]),
|
||||
]);
|
||||
cm.bind_seq(
|
||||
KeyCode::Esc,
|
||||
none,
|
||||
vec![
|
||||
("clear-buffer", vec!["command".into()]),
|
||||
("enter-mode", vec!["normal".into()]),
|
||||
],
|
||||
);
|
||||
cm.bind_seq(
|
||||
KeyCode::Enter,
|
||||
none,
|
||||
vec![
|
||||
("execute-command", vec![]),
|
||||
("clear-buffer", vec!["command".into()]),
|
||||
],
|
||||
);
|
||||
cm.bind(KeyCode::Backspace, none, "command-mode-backspace");
|
||||
cm.bind_any_char("append-char", vec!["command".into()]);
|
||||
set.insert(ModeKey::CommandMode, Arc::new(cm));
|
||||
@ -1086,9 +1145,11 @@ mod tests {
|
||||
let ks = KeymapSet::default_keymaps();
|
||||
let editing = ks.mode_maps.get(&ModeKey::Editing).unwrap();
|
||||
// Should have AnyChar for text input
|
||||
assert!(editing
|
||||
.lookup(KeyCode::Char('z'), KeyModifiers::NONE)
|
||||
.is_some());
|
||||
assert!(
|
||||
editing
|
||||
.lookup(KeyCode::Char('z'), KeyModifiers::NONE)
|
||||
.is_some()
|
||||
);
|
||||
// Should have Esc to exit
|
||||
assert!(editing.lookup(KeyCode::Esc, KeyModifiers::NONE).is_some());
|
||||
}
|
||||
@ -1097,9 +1158,11 @@ mod tests {
|
||||
fn search_mode_has_any_char_and_esc() {
|
||||
let ks = KeymapSet::default_keymaps();
|
||||
let search = ks.mode_maps.get(&ModeKey::SearchMode).unwrap();
|
||||
assert!(search
|
||||
.lookup(KeyCode::Char('a'), KeyModifiers::NONE)
|
||||
.is_some());
|
||||
assert!(
|
||||
search
|
||||
.lookup(KeyCode::Char('a'), KeyModifiers::NONE)
|
||||
.is_some()
|
||||
);
|
||||
assert!(search.lookup(KeyCode::Esc, KeyModifiers::NONE).is_some());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user