Repository navigation
Releases: Benjmhart/keybind-find
Releases · Benjmhart/keybind-find
Release list
v1.0.0
Changed
- The xmonad float rule in the docs caps the picker at 90% of the screen;
doCenterFloatalone let it run off a small or high-DPI screen. - The oldest Rust that builds keybind-find is now 1.95 (
rust-version, was 1.98), socargo installworks with the Rust most distributions ship.
Added
- vim: a running vim with a server (
--servername, or gvim's own) is asked for its maps, mode and filetype over--remote-expr, so its buffer's maps and maps made by hand are listed and other modes' maps hidden; without a server, the headless read as before. - helix: its keys in normal, select and insert mode from the default keymap pinned per version (25.01.1, 25.07.1) with your
config.tomlkeys merged as helix merges them, when helix is in the focused terminal. A plugin namedhelixis now refused, since the name is the built-in provider's. - Xfce Terminal: its menu and scrolling shortcuts from defaults pinned per version (1.2.0) with your
accels.scmon top; and on X11 the program in the focused window of a terminal serving several windows from one process (Xfce Terminal, kitty, urxvtd, …) is found by theWINDOWIDin its environment, when no window of that process has tabs and each window it names still exists. - ranger: its file-browser keys from the default rc.conf pinned at 1.9.4 (the same since 1.9.3) with
/etc/ranger/rc.confand yourrc.confon top, read into ranger's key tree, when ranger is in the focused terminal. - ncmpcpp: its keys from defaults pinned at 0.10.1 (the same since 0.9.2) with your
bindingsfiles on top, read as ncmpcpp reads them, when ncmpcpp is in the focused terminal. - Zed: its keys from the Linux keymaps of Zed 1.25.3 (built in) for your base keymap and vim or helix mode, with your
keymap.jsonon top, each bind's context as tags, and the file's extension guessed from the window title. - Emacs: the keys active in the buffer you are in, asked of the running Emacs over its server (
emacsclient), with its major mode and evil state as facts; with no server, the global map (and evil's state maps) of your init file fromemacs --batch. In a terminal (emacs,emacsclient -t) or an Emacs window. - st, surf, tabbed and dwm: their stock keys from
config.def.h(st 0.9.3, surf 2.1, tabbed 0.9, dwm 6.8) as built-in sheets, st's, surf's and tabbed's by window class and dwm's in a dwm session. - VS Code: a small companion extension (
editors/vscode/) that tells keybind-find the focused window's language and file extension, in place of the window-title guess. - VS Code (and Insiders, VSCodium, Code - OSS): its default keys (1.143.1) with your installed extensions' and your
keybindings.jsonon top, eachwhenclause as scopes, and the file's language guessed from the window title. - Midnight Commander: its keys by keymap section, from mc's compiled-in defaults (4.8.33) with the system and your keymap on top, when mc, mcedit, mcview or mcdiff is in the focused terminal.
- GNOME Terminal: its keyboard shortcuts from
gsettings, as its preferences set them, when a GNOME Terminal window has focus (on X11, sway and Hyprland). - Obsidian: its command hotkeys from defaults pinned for 1.14.5 with the focused vault's
hotkeys.jsonon top (the vault picked by window title), when an Obsidian window has focus. - foot: its key, search and URL bindings from defaults pinned per version (1.28.0) with your
foot.inion top (followinginclude=), and its text bindings, when a foot or footclient window has focus. - GNOME: its window, shell, mutter and media-key shortcuts, your custom shortcuts and the overlay key, from
gsettings; on GNOME Wayland the list opens in fzf in alacritty (fuzzel needs layer-shell). - micro: its keys from defaults pinned per version (2.0.11, 2.0.14, 2.0.15) with your
bindings.jsonon top, when micro is in the focused terminal. - zathura: its keys from defaults pinned per version (0.5.2, 0.5.11, 2026.10.23) with your zathurarc's
map/unmapon top, when a zathura window has focus. - yazi: its keys from pinned default keymaps (25.4.8, 25.5.31, 26.9.1) with your
keymap.tomlmerged in, when yazi is in the focused terminal. - i3: the bindings of the config i3 has loaded, from
i3-msg -t get_config, read with sway's parser. - Xfce: xfwm4's window shortcuts and the application shortcuts from
xfconf-query, as Xfce picks your customized set or its defaults. - kitty: its keys from pinned defaults (0.49.2) with your kitty.conf on top, and, with kitty's remote control on, the program in its focused tab.
- GNU screen: its command keys from pinned defaults (4.9.1, 5.0.2) with your screenrc on top, and nvim inside screen.
- Ghostty: its keys from
ghostty +list-keybinds(key tables tagged), when a Ghostty window has focus. - KDE Plasma: its global shortcuts and apps' launch shortcuts, the focused window on Wayland through
kdotool, and, on KDE and GNOME under Wayland, an error naming the keys to press instead of a send that can only fail.
Fixed
- zathura: your
~/.config/zathura/zathurarcwas ignored, since native zathura's windows carry the Flatpak's app id (org.pwmt.zathura) and were taken for the Flatpak's; its file is read now unless there is none, then the Flatpak's. - A GTK terminal (GNOME Terminal, Terminator) lost the program inside to its image-loader sandbox (
bwrap), a second child with no tty: only children with a tty count now. - Wayland:
XDG_CURRENT_DESKTOP=KDEorGNOMEnames KDE or GNOME only while Plasma or GNOME Shell runs, andSWAYSOCK,NIRI_SOCKETorHYPRLAND_INSTANCE_SIGNATUREonly while its socket exists, so other compositors no longer have their picks refused. - mpv: a key your script binds at load no longer goes missing now and then; the sheet is read once the bindings settle.
v0.1.0-alpha.1
The first public pre-release. 1.0.0 follows once it has been used for a while.
Added
Everything below is new.
Providers
- xmonad: the running keymap, with each binding's name, as
XMonad.Util.NamedActionsreports it. - sway:
bindsymlines from the sway config, followingincludeandset $var; the focused window from sway's tree. - alacritty: alacritty's defaults merged with your
[[keyboard.bindings]]. - nvim: your mappings from a headless nvim with your config, with each map's
desc. - herdr: herdr's defaults for its version, your
config.tomland plugin commands. - tmux: the running server's key tables, with your prefix and each key's note.
- nvim inside a herdr or tmux pane is found and listed.
- Vimium: its defaults for the installed version, and your remaps from a saved backup.
- espanso: your matches for the focused app; picking one types its trigger.
Picker and key search
- fzf in a floating alacritty window on X11, with aligned key, description and program columns.
- Key search (X11, fzf 0.66 or newer): press a binding's keys, Super combinations included, to narrow the list; it is how the list opens.
ctrl-schanges the search scope (all, keys, description, program).- fuzzel on Wayland (sway; other compositors read only XWayland windows), dmenu on X11 without fzf or alacritty, or any dmenu-style program through
KEYBIND_FIND_PICKER. - The picked binding is sent to the focused window (
xdotoolon X11,wtypeon Wayland);--printprints it instead. keybind-find dump [<provider>]prints the sheets as JSON;keybind-find keysprints the keys you press.- Errors under a hotkey are also shown as a desktop notification.
Sheets
- Your own JSON sheets and executable parsers in
~/.config/keybind-find/sheets/, matched by window class. - Web-app sheets, matched by window title in any common browser.
- Built-in sheets for Gmail, YouTube and GitHub.
Ranking
- The bindings you pick most come first, from a local usage log.
- The rest alternate between programs, the focused app first, then the window manager.
Config
config.tomlrebinds keybind-find's own picker keys (run, text search, undo, key search, scope); its own keys are listed too.