Reference for the default page-mode bindings shipped by
buffr_modal::Keymap::default_bindings. All entries assume the leader key is
\ (vim default); the leader is configurable per-profile via
Keymap::set_leader.
Defaults mirror Vieb (stock app/renderer/input.js). Intentional
divergences are flagged inline with [buffr].
The engine speaks vim-flavoured chord notation. <C-...> = Ctrl, <S-...> =
Shift, <M-...> / <A-...> = Alt, <D-...> = Super (Cmd on macOS), <leader>
= configured leader char.
Count — leading digits accumulate: 5j scrolls down 5 lines, 12G jumps
to line 12 (when implemented). 0 alone is bindable (vim convention: column
0); digits 1-9 always start a count.
Register — "<char> selects a register before a yank. Phase 2 captures
register state on the engine but does not yet thread it through to actions.
Yank-to-register lands with Phase 5.
When a binding is a prefix of a longer one (g vs gg), the engine waits up to
Engine::timeout() (default 1000ms). If the user does not extend the prefix,
the shorter action fires.
[buffr] Open tab to the right of active; omnibar opens so you type a URL.
O
TabNewLeft
[buffr] Open tab to the left of active; omnibar opens so you type a URL.
d
TabClose
<C-w>c
TabClose
<C-w>n
DuplicateTab
<C-w>p
PinTab
[buffr] Vieb uses <C-w>p for prev-buffer.
TabClose (and :q) close the active tab. The application only exits when the
last tab is gone. DuplicateTab clones the active tab's URL into a fresh tab;
PinTab toggles the pinned bit (sort hint only — pin does not prevent close).
See multi-tab.md.
[buffr] Vieb uses <C-c> for copyText; buffr keeps StopLoading.
Note:<Esc> is no longer bound to StopLoading in Normal mode. Use
<C-c> to stop a page load. <Esc> is now ExitInsertMode — it blurs the
focused DOM element and resets the engine to Normal unconditionally.
When : opens the command line or e/<C-l> opens the omnibar, all keystrokes
route to the input bar instead of the page-mode trie. The bindings below mirror
readline / vim's command-line conventions.
Keys
Action
<Esc> / <C-c>
Cancel — close overlay, return to Normal mode.
<CR>
Confirm — dispatch the command or navigate to the URL.
<Tab> / <Down>
Move suggestion selection one row down (cycles to last).
<S-Tab> / <Up>
Move suggestion selection one row up (clears at top).
When a page asks for a permission (camera, microphone, geolocation,
notifications, clipboard, MIDI sysex, …) buffr surfaces a prompt strip and
routes keystrokes to it until the request is resolved. The page content does not
see these keys.
Keys
Action
a / y
Allow once (no row written).
A / Y
Allow + remember for this origin.
d / n
Deny once (no row written).
D / N
Deny + remember for this origin.
s
Synonym for D — deny + remember.
<Esc>
Defer — Dismiss / cancel(), no persistence.
If multiple requests pile up they queue; the statusline shows (N more pending)
on the prompt strip. After resolving one the next prompt appears on the
following frame.
Bindings come from a static table in crates/buffr-modal/src/keymap.rs. User
overrides go in ~/.config/buffr/config.toml under [keymap.<mode>] — see
config.md for the full schema and action notation. The watcher
reloads the keymap on file changes (250ms debounced).