maomaowm/docs/bindings/keys.md
ShadowProgr e4c74de7df
feat: add smartkillclient dispatcher
Add a smartkillclient bind function that removes the focused client from
the currently viewed tag(s) when it lives on more than one tag, and only
falls back to closing it (killclient behaviour) when it is on a single
tag, or when removing the viewed tag(s) would leave it on none.
2026-06-19 15:47:48 +07:00

9.2 KiB
Raw Blame History

title description
Key Bindings Define keyboard shortcuts and modes.

Syntax

Key bindings follow this format:

bind[flags]=MODIFIERS,KEY,COMMAND,PARAMETERS
  • Modifiers: SUPER, CTRL, ALT, SHIFT, NONE (combine with +, e.g. SUPER+CTRL+ALT).
  • Key: Key name (from xev or wev) or keycode (e.g., code:24 for q).

Info: bind automatically converts keysym to keycode for comparison. This makes it compatible with all keyboard layouts, but the matching may not always be precise. If a key combination doesn't work on your keyboard layout, use a keycode instead (e.g., code:24 instead of q).

Flags

  • l: Works even when screen is locked.
  • s: Uses keysym instead of keycode to bind.
  • r: Triggers on key release instead of press.
  • p: Pass key event to client.

Examples:

bind=SUPER,Q,killclient
bindl=SUPER,L,spawn,swaylock

# Using keycode instead of key name
bind=ALT,code:24,killclient

# Combining keycodes for modifiers and keys
bind=code:64,code:24,killclient
bind=code:64+code:133,code:24,killclient

# Bind with no modifier
bind=NONE,XF86MonBrightnessUp,spawn,brightnessctl set +5%

# Bind a modifier key itself as the trigger key
bind=alt,shift_l,switch_keyboard_layout

Key Modes (Submaps)

You can divide key bindings into named modes. Rules:

  1. Set keymode=<name> before a group of bind lines — those binds only apply in that mode.
  2. If no keymode is set before a bind, it belongs to the default mode.
  3. The special common keymode applies its binds across all modes.

Use setkeymode to switch modes, and mmsg get keymode to query the current mode.

# Binds in 'common' apply in every mode
keymode=common
bind=SUPER,r,reload_config

# Default mode bindings
keymode=default
bind=ALT,Return,spawn,foot
bind=SUPER,F,setkeymode,resize

# 'resize' mode bindings
keymode=resize
bind=NONE,Left,resizewin,-10,0
bind=NONE,Right,resizewin,+10,0
bind=NONE,Escape,setkeymode,default

Single Modifier Key Binding

When binding a modifier key itself, use NONE for press and the modifier name for release:

# Trigger on press of Super key
bind=none,Super_L,spawn,rofi -show run

# Trigger on release of Super key
bindr=Super,Super_L,spawn,rofi -show run

Dispatchers List

Window Management

Command Param Description
killclient force Close the focused window. If force is specified, sends SIGKILL.
smartkillclient - Remove the focused window from the current tag(s) if it is on multiple tags; otherwise close it.
togglefloating - Toggle floating state.
toggle_all_floating - Toggle all visible clients floating state.
togglefullscreen - Toggle fullscreen.
togglefakefullscreen - Toggle "fake" fullscreen (remains constrained).
togglemaximizescreen - Maximize window (keep decoration/bar).
toggleglobal - Pin window to all tags.
toggle_render_border - Toggle border rendering.
centerwin - Center the floating window.
minimized - Minimize window to scratchpad.
restore_minimized - Restore window from scratchpad.
toggle_scratchpad - Toggle scratchpad.
toggle_named_scratchpad appid,title,cmd Toggle named scratchpad. Launches app if not running, otherwise shows/hides it.

Focus & Movement

Command Param Description
focusid - Focus window (can target any window via IPC: mmsg dispatch focusid client,<id>)
focusdir left/right/up/down Focus window in direction.
focusstack next/prev Cycle focus within the stack.
focuslast - Focus the previously active window.
exchange_client left/right/up/down Swap window with neighbor in direction.
exchange_stack_client next/prev Exchange window position in stack.
zoom - Swap focused window with Master.

Tags & Monitors

Command Param Description
view -1/0/1-9 or mask [,synctag] View tag. -1 = previous tagset, 0 = all tags, 1-9 = specific tag, mask e.g. 1|3|5. Optional synctag (0/1) syncs the action to all monitors.
viewtoleft [synctag] View previous tag. Optional synctag (0/1) syncs to all monitors.
viewtoright [synctag] View next tag. Optional synctag (0/1) syncs to all monitors.
viewtoleft_have_client [synctag] View left tag and focus client if present. Optional synctag (0/1).
viewtoright_have_client [synctag] View right tag and focus client if present. Optional synctag (0/1).
viewcrossmon tag,monitor_spec View specified tag on specified monitor.
tag 1-9 [,synctag] Move window to tag. Optional synctag (0/1) syncs to all monitors.
tagsilent 1-9 Move window to tag without focusing it.
tagtoleft [synctag] Move window to left tag. Optional synctag (0/1).
tagtoright [synctag] Move window to right tag. Optional synctag (0/1).
tagcrossmon tag,monitor_spec Move window to specified tag on specified monitor.
toggletag 0-9 Toggle tag on window (0 means all tags).
toggleview 1-9 Toggle tag view.
comboview 1-9 View multi tags pressed simultaneously.
focusmon left/right/up/down/monitor_spec Focus monitor by direction or monitor spec.
tagmon left/right/up/down/monitor_spec,[keeptag] Move window to monitor by direction or monitor spec. keeptag is 0 or 1.

Layouts

Command Param Description
setlayout name Switch to layout (e.g., scroller, tile).
switch_layout - Cycle through available layouts.
incnmaster +1/-1 Increase/Decrease number of master windows.
setmfact +0.05 Increase/Decrease master area size.
set_proportion float Set scroller window proportion (0.01.0).
switch_proportion_preset - Cycle proportion presets of scroller window.
scroller_stack left/right/up/down Move window inside/outside scroller stack by direction.
incgaps +/-value Adjust gap size.
togglegaps - Toggle gaps.
dwindle_toggle_split_direction - Toggle split direction in dwindle layout.
dwindle_split_horizontal - Set split window direction to horizontal in dwindle layout.
dwindle_split_vertical - Set split window direction to vertical in dwindle layout.

System

Command Param Description
spawn cmd Execute a command.
spawn_shell cmd Execute shell command (supports pipes |).
spawn_on_empty cmd,tagnumber Open command on empty tag.
reload_config - Hot-reload configuration.
quit - Exit mangowm.
toggleoverview - Toggle overview mode.
togglejump - Toggle overview with jump mode.
create_virtual_output - Create a headless monitor (for VNC/Sunshine).
destroy_all_virtual_output - Destroy all virtual monitors.
toggleoverlay - Toggle overlay state for the focused window.
toggle_trackpad_enable - Toggle trackpad enable.
setkeymode mode Set keymode.
switch_keyboard_layout [index] Switch keyboard layout. Optional index (0, 1, 2...) to switch to specific layout.
setoption key,value Set config option temporarily.
disable_monitor monitor_spec Shutdown monitor. Accepts a monitor spec.
enable_monitor monitor_spec Power on monitor. Accepts a monitor spec.
toggle_monitor monitor_spec Toggle monitor power. Accepts a monitor spec.
chvt 1-9 Change virtual terminal (tty, equivalent to using ctrl+alt+Fkeys)

Media Controls

Warning: Some keyboards don't send standard media keys. Run wev and press your key to check the exact key name.

Brightness

Requires: brightnessctl

bind=NONE,XF86MonBrightnessUp,spawn,brightnessctl s +2%
bind=SHIFT,XF86MonBrightnessUp,spawn,brightnessctl s 100%
bind=NONE,XF86MonBrightnessDown,spawn,brightnessctl s 2%-
bind=SHIFT,XF86MonBrightnessDown,spawn,brightnessctl s 1%

Volume

Requires: wpctl (WirePlumber)

bind=NONE,XF86AudioRaiseVolume,spawn,wpctl set-volume @DEFAULT_SINK@ 5%+
bind=NONE,XF86AudioLowerVolume,spawn,wpctl set-volume @DEFAULT_SINK@ 5%-
bind=NONE,XF86AudioMute,spawn,wpctl set-mute @DEFAULT_SINK@ toggle
bind=SHIFT,XF86AudioMute,spawn,wpctl set-mute @DEFAULT_SOURCE@ toggle

Playback

Requires: playerctl

bind=NONE,XF86AudioNext,spawn,playerctl next
bind=NONE,XF86AudioPrev,spawn,playerctl previous
bind=NONE,XF86AudioPlay,spawn,playerctl play-pause

Floating Window Movement

Command Param Description
smartmovewin left/right/up/down Move floating window by snap distance.
smartresizewin left/right/up/down Resize floating window by snap distance.
movewin (x,y) Move floating window.
resizewin (width,height) Resize window.