Keys and actions

This page lists every key name and action accepted by the current configuration validator.

Key syntax

Key names are case-insensitive. A trigger or send_key can be a single key:

"1"
"Space"
"F12"

Or a modifier combo:

"Ctrl+1"
"LShift+F2"
"Ctrl+Alt+Delete"

Only modifiers may precede the final key. A combo must contain exactly one non-modifier key and cannot end in a modifier. Duplicate logical modifiers are tolerated by combo parsing and collapse during dispatch, but should be avoided.

any is accepted only in keymaps[].keys and acts as the match-all trigger. It is not a valid send_key. Be careful: it can suppress and forward nearly every ordinary key event while enabled.

Accepted modifiers

Generic        Left-specific   Right-specific
-------------  --------------  --------------
Ctrl           LCtrl           RCtrl
Alt            LAlt            RAlt
Shift          LShift          RShift

Generic and left/right-specific variants are normalized for message dispatch where required.

Accepted ordinary keys

Letters        A through Z
Number row     0 through 9
Function keys  F1 through F24

Backspace      Tab             Clear
Enter          Pause           CapsLock
Escape         Space           PageUp
PageDown       End             Home
Left           Up              Right
Down           PrintScreen     Insert
Delete         LWin            RWin
Apps

Numeric keypad keys

NumPad0 through NumPad9
NumPadMultiply
NumPadAdd
NumPadSeparator
NumPadSubtract
NumPadDecimal
NumPadDivide

Accepted punctuation keys

;    =    ,    -    .    /
`    [    \    ]    '

Because JSON treats backslash specially, the backslash key is written as:

"\\"

Action summary

Action                     Main purpose
-------------------------  ---------------------------------------------
forward                    Send a key to selected managed instances.
forward_focused            Send a key only to the focused managed client.
round_robin                Send to one selected client at a time.
do_nothing                 Consume the trigger without forwarding it.
enable_keymaps             Enable named mappings.
disable_keymaps            Disable named mappings.
toggle_keymaps             Toggle named mappings.
enable_forwarding          Restore normal background forwarding.
disable_forwarding         Limit forwarding to the focused client.
toggle_forwarding          Toggle global forwarding state.
mouse_broadcast            Control continuous mouse broadcasting.
swap_instance_to_region    Move an instance into a configured region.

forward

Dispatches the trigger key, or send_key, to instances selected by targets. With no targets it uses all active instances.

{
  "action": "forward",
  "send_key": "2",
  "targets": ["all_other"],
  "sync_mouse": true,
  "add_instance_modifier": false
}

Combo modifiers that the focused application received directly are injected for background targets as necessary.

forward_focused

Dispatches only to the currently focused managed instance. targets does not alter this action's focused-only purpose.

{ "action": "forward_focused", "send_key": "1" }

This is useful in a mapping that should consume a system-wide trigger but affect only the active client.

round_robin

Selects one eligible instance, sends the key, and advances to the next eligible instance on key down. Round-robin state is tracked per mapping/action identity.

{
  "action": "round_robin",
  "targets": ["game2", "game3", "game4", "game5"],
  "sync_mouse": true
}

With no targets it rotates through all instances. The UI can show the next target with show_round_robin_next_target.

do_nothing

Consumes the matched trigger without dispatching a key:

{ "action": "do_nothing" }

This is useful for blocking a key while a named keymap is enabled.

Keymap state actions

These actions change named keymaps:

{ "action": "enable_keymaps",  "keymaps": ["combat"] }
{ "action": "disable_keymaps", "keymaps": ["combat"] }
{ "action": "toggle_keymaps",  "keymaps": ["combat"] }

All listed names must exist. State changes are handled on key release so a trigger does not repeatedly toggle from keyboard auto-repeat. Disabling a keymap releases suppressed forwarding state associated with it.

Global forwarding actions

{ "action": "enable_forwarding" }
{ "action": "disable_forwarding" }
{ "action": "toggle_forwarding" }

When global forwarding is disabled, forwarding actions are limited to the currently focused managed instance when it passes any configured target filter. Background targets are ignored. Disabling forwarding also releases suppressed keys.

These actions change state on key release.

mouse_broadcast

Controls continuous mouse movement and button broadcasting:

{
  "action": "mouse_broadcast",
  "mouse_broadcast_mode": "toggle"
}

Mode         Effect
-----------  ------------------------------------------------------
toggle       Switch between enabled and disabled.
enable       Enable continuous broadcasting.
disable      Disable continuous broadcasting.
until_click  Enable until the next mouse button-down event.
once         Alias-like behavior: enable until the next click.

Omitting the mode uses toggle. State changes occur on key release. While enabled, pointer movement is synchronized to other instances and mouse button messages are forwarded.

swap_instance_to_region

Moves the configured instance to the configured target region:

{
  "action": "swap_instance_to_region",
  "source_instance": "game3",
  "target_region": "main"
}

Both names are required and validated. The swap coordinates window-position changes and input quarantine. It uses move-only swap behavior rather than resizing on each swap. Prefer execute_on: "release" for an explicit, predictable trigger lifecycle.

Trigger timing recipes

Execute a mapping when the key is first pressed:

"execute_on": "press"

Execute a tap when released:

"execute_on": "release"

Execute a tap on both press and release:

"execute_on": "press_and_release"

send_on_release: true is older forwarding lifecycle control. It cannot be combined with execute_on: "press". Prefer explicit execute_on in new mappings.

Five-client recipes

Forward number keys to every client:

{
  "name": "numbers",
  "keys": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],
  "actions": [
    [
      { "action": "forward" }
    ]
  ]
}

Forward only to the four secondary clients:

{
  "keys": ["1", "2", "3"],
  "actions": [
    [
      { "action": "forward", "targets": ["game2", "game3", "game4", "game5"] }
    ]
  ]
}

Toggle a disabled wildcard mapping:

{
  "keys": ["Ctrl+B"],
  "actions": [
    [
      { "action": "toggle_keymaps", "keymaps": ["broadcast_all"] }
    ]
  ]
},
{
  "name": "broadcast_all",
  "enabled": false,
  "keys": ["any"],
  "actions": [
    [
      { "action": "forward" }
    ]
  ]
}