Configuration

Keybindings

Walker provides extensive keyboard control and customization options.

Default Keybindings

KeyAction
EscapeClose Walker
Down/Next result
Up/Previous result
TabNext result (alternative)
Shift+TabPrevious result

Execution

KeyAction
EnterExecute default action
Shift+EnterExecute without closing Walker

Search Control

KeyAction
Ctrl+EToggle exact search mode
Ctrl+RResume last query (service mode)

Quick Activation

KeyAction
F1Activate 1st result
F2Activate 2nd result
F3Activate 3rd result
F4Activate 4th result

Provider-Specific Keybindings

Desktop Applications

KeyAction
EnterLaunch application
Shift+EnterLaunch and keep Walker open
Ctrl+PPin/unpin application
Ctrl+NMove pinned item up
Ctrl+MMove pinned item down

Files

KeyAction
EnterOpen file
Ctrl+EnterOpen parent directory
Ctrl+Shift+CCopy file path
Ctrl+CCopy file

Calculator

KeyAction
EnterCopy result
Ctrl+DDelete from history
Ctrl+SSave calculation

Runner (Commands)

KeyAction
EnterRun command
Shift+EnterRun in terminal

Clipboard

KeyAction
EnterCopy to clipboard
Ctrl+DRemove entry
Ctrl+Shift+DClear entire history
Ctrl+IToggle image display
Ctrl+OEdit clipboard entry

Todo

KeyAction
EnterSave todo / Toggle state
Ctrl+DDelete todo
Ctrl+FMark as done
Ctrl+XClear completed todos

Bluetooth

KeyAction
EnterConnect/disconnect
Ctrl+FStart device scan
Ctrl+TTrust device
Ctrl+UUntrust device
Ctrl+DRemove device

Arch Linux Packages

KeyAction
EnterInstall/remove pkg

Symbols & Unicode

KeyAction
EnterInsert symbol
KeyAction
EnterOpen in browser

Provider List

KeyAction
EnterSwitch to provider

Customizing Keybindings

Edit ~/.config/walker/config.toml to customize keybindings.

Global Keybindings

[keybinds]
close = ["Escape", "ctrl q"]              # Multiple bindings allowed
next = ["Down", "ctrl j"]
previous = ["Up", "ctrl k"]
toggle_exact = ["ctrl e"]
resume_last_query = ["ctrl r"]
quick_activate = ["F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8"]

Provider Action Keybindings

[providers.actions]

# Example: Custom calculator bindings
calc = [
  { action = "copy", default = true, bind = "Return" },
  { action = "copy", bind = "ctrl c" },           # Additional binding
  { action = "delete", bind = "ctrl d", after = "AsyncReload" },
  { action = "save", bind = "ctrl s", after = "ClearReload" },
]

# Example: Custom application launcher bindings
desktopapplications = [
  { action = "start", default = true, bind = "Return" },
  { action = "start", bind = "ctrl o" },          # Alternative
  { action = "start:keep", bind = "shift Return", after = "KeepOpen" },
  { action = "pin", bind = "ctrl p", after = "AsyncReload" },
]

Keybinding Format

Valid Modifiers

  • ctrl - Control key
  • alt - Alt key
  • shift - Shift key
  • super - Super/Windows/Command key

Combining Modifiers

# Single modifier
bind = "ctrl a"

# Multiple modifiers
bind = "ctrl shift a"
bind = "ctrl alt shift f"

# No modifier (just a key)
bind = "Return"
bind = "F1"

Key Names

Walker uses GDK key names. Common keys:

Special Keys:

  • Return (Enter)
  • Escape
  • BackSpace
  • Delete
  • Tab
  • space

Navigation:

  • Up, Down, Left, Right
  • Home, End
  • Page_Up, Page_Down

Function Keys:

  • F1 through F12

Letters and Numbers:

  • a through z
  • 0 through 9

Symbols:

  • semicolon (;)
  • colon (:)
  • slash (/)
  • backslash (\)
  • period (.)
  • comma (,)
  • minus (-)
  • plus (+)
  • equal (=)
  • bracketleft ([)
  • bracketright (])
  • braceleft ({)
  • braceright (})

For a complete list, see GDK key values.

The constant name GDK_KEY_semicolon means the key name is semicolon.

Action Properties

When defining action keybindings:

{ action = "name", bind = "key combo", default = true, global = true, label = "Label", after = "Behavior" }
  • action - Action identifier (required)
  • bind - Keybinding (optional, if not default)
  • default - Use this action for Enter key (optional)
  • global - Available regardless of selection (optional)
  • label - Display label (optional)
  • after - Post-action behavior (optional)
    • Nothing - Stay open, no reload
    • Close - Close Walker
    • KeepOpen - Keep Walker open
    • Reload - Reload results
    • ClearReload - Clear and reload
    • AsyncReload - Async reload
    • AsyncClearReload - Async clear and reload

Examples

Vim-like Navigation

[keybinds]
close = ["Escape", "ctrl c"]
next = ["Down", "ctrl j"]
previous = ["Up", "ctrl k"]

Extended Quick Activation

[keybinds]
quick_activate = [
  "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8",
  "ctrl 1", "ctrl 2", "ctrl 3", "ctrl 4"
]

Custom Application Actions

[providers.actions]
desktopapplications = [
  { action = "start", default = true, bind = "Return" },
  { action = "start:keep", bind = "ctrl Return", after = "KeepOpen" },
  { action = "start:keep", bind = "shift Return", after = "KeepOpen" },
  { action = "pin", bind = "ctrl p", after = "AsyncReload" },
  { action = "unpin", bind = "ctrl shift p", after = "AsyncReload" },
  { action = "pinup", bind = "alt Up", after = "AsyncReload" },
  { action = "pindown", bind = "alt Down", after = "AsyncReload" },
]

Custom File Manager Actions

[providers.actions]
files = [
  { action = "open", default = true, bind = "Return" },
  { action = "open", bind = "ctrl o" },
  { action = "opendir", label = "open parent", bind = "ctrl shift o" },
  { action = "opendir", bind = "alt Up" },
  { action = "copypath", label = "copy path", bind = "ctrl c" },
  { action = "copyfile", label = "copy file", bind = "ctrl shift c" },
]

Debugging Keybindings

Enable debug mode to see keybinding information:

debug = true

Or run Walker with debug flag:

walker --debug

This will print keybinding events to help troubleshoot issues.

Keybinding Conflicts

If multiple actions have the same keybinding:

  1. Provider-specific bindings take precedence
  2. The first defined binding wins
  3. Global bindings are always available

To avoid conflicts:

  • Use unique combinations for different actions
  • Use modifiers to distinguish similar actions
  • Check default bindings before adding custom ones

Tips

  1. Multiple Bindings: You can assign multiple keybindings to the same action:

    close = ["Escape", "ctrl q", "ctrl w"]
    
  2. Consistency: Keep similar actions across providers using similar keys:

    # Use Ctrl+D for delete everywhere
    calc: { action = "delete", bind = "ctrl d" }
    clipboard: { action = "remove", bind = "ctrl d" }
    todo: { action = "delete", bind = "ctrl d" }
    
  3. Global Actions: Mark frequently used actions as global:

    { action = "clear_all", bind = "ctrl shift d", global = true }
    
  4. Testing: After changing keybindings, test immediately to ensure they work as expected.

Next Steps

Previous
Configuration