Skip to content

Releases: Benjmhart/keybind-find

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 14:59
4374bcd

Changed

  • The xmonad float rule in the docs caps the picker at 90% of the screen; doCenterFloat alone 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), so cargo install works 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.toml keys merged as helix merges them, when helix is in the focused terminal. A plugin named helix is 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.scm on 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 the WINDOWID in 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.conf and your rc.conf on 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 bindings files 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.json on 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 from emacs --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.json on top, each when clause 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.json on 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.ini on top (following include=), 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.json on 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/unmap on 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.toml merged 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/zathurarc was 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=KDE or GNOME names KDE or GNOME only while Plasma or GNOME Shell runs, and SWAYSOCK, NIRI_SOCKET or HYPRLAND_INSTANCE_SIGNATURE only 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

v0.1.0-alpha.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 18:14

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.NamedActions reports it.
  • sway: bindsym lines from the sway config, following include and set $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.toml and 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-s changes 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 (xdotool on X11, wtype on Wayland); --print prints it instead.
  • keybind-find dump [<provider>] prints the sheets as JSON; keybind-find keys prints 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.toml rebinds keybind-find's own picker keys (run, text search, undo, key search, scope); its own keys are listed too.