mirror of
https://github.com/lotabout/skim.git
synced 2026-09-10 07:16:23 -04:00
Extend the bindable-event set and generalise binding so that actions can themselves be bound. New finder events (fired from the post-draw `Event::Render` path, so a binding sees a stable, up-to-date list): - `result` — filtering for the current query completed - `focus` — the focused item changed (cursor move or result update) - `zero` — a completed search has no matches - `one` — a completed search has exactly one match `zero`/`one` read `MatcherControl::get_num_matched()` rather than the rendered list count, which can briefly lag the matcher. Actions as events: any action can be bound as if it were an event, so a follow-up chain runs after it (e.g. `reload:first`, `first:last`). This is parsed by `parse_action_binds` into `SkimOptions::action_binds` (keyed by `Action::name`) and applied in `handle_action`, which now wraps the per-variant `dispatch_action`. - Keys win: a name shared by a key and an action binds the key; use an `act-` prefix to target the action (`act-up:down`). - New `skip` action suppresses the triggering action's own behaviour, so `act-up:skip+down` remaps the up action to down and `up:skip` disables the up key. Also fixes `parse_key` so a non-numeric `f…` name (e.g. `focus`, `first`) falls through to name/event matching instead of erroring on the function- key branch. Adds unit and snapshot tests and documents everything in ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019QKxusGbxLxqWdYyeqrb68
30 lines
2.1 KiB
Plaintext
30 lines
2.1 KiB
Plaintext
---
|
|
source: tests/binds.rs
|
|
description: "input: items [\"a\", \"b\", \"c\"]\noptions: --bind zero:set-header(none)\nafter:\n @char 'z'"
|
|
---
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" "
|
|
" none "
|
|
" 0/3 0/0"
|
|
"> z "
|
|
cursor: (24, 4)
|