chore: format

This commit is contained in:
Edward Langley
2026-04-13 21:30:37 -07:00
parent af74dc3d3f
commit 6370f8b19f
19 changed files with 445 additions and 249 deletions

View File

@ -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());
}