Shortcuts
The [shortcuts] section binds the shell’s global keyboard shortcuts. These are registered with the compositor (Mir’s ext-input-trigger protocols), so they fire no matter which window has focus.
[shortcuts]open_settings = "super+s"open_launcher = "super+d"open_emoji = "ctrl+shift+e"open_notifications = "super+n"open_power_menu = "shift+super+e"switch_windows = "alt+tab"switch_windows_back = "alt+shift+tab"screenshot_area = "print"record_screen = "super+print"toggle_scratchpad = "super+z"move_to_scratchpad = "shift+super+z"power_button = "poweroff"| Key | Type | Default | Description |
|---|---|---|---|
open_settings |
string | "super+s" |
Opens (and closes) the settings overlay |
open_launcher |
string | "super+d" |
Opens (and closes) the application launcher |
open_emoji |
string | "ctrl+shift+e" |
Opens (and closes) the emoji picker |
open_notifications |
string | "super+n" |
Opens (and closes) the notification panel |
open_power_menu |
string | "shift+super+e" |
Opens (and closes) the power menu — shut down, restart, suspend, lock or log out |
switch_windows |
string | "alt+tab" |
Opens the window switcher and moves forward through it |
switch_windows_back |
string | "alt+shift+tab" |
The same switcher, moving backwards |
screenshot_area |
string | "print" |
Drag out an area and screenshot it — the screenshot module’s own Select an area |
record_screen |
string | "super+print" |
Starts recording the screen you are on; press it again to stop |
toggle_scratchpad |
string | "super+z" |
Shows what is on the window manager’s scratchpad, or hides it — the scratchpad module’s own click |
move_to_scratchpad |
string | "shift+super+z" |
Moves the focused window to the scratchpad |
power_button |
string | "poweroff" |
The machine’s own power button — what it does is [power] |
record_screen records the whole of the output holding the focused workspace, and needs no aim: nothing is put on screen first, so the recording opens on the desktop as it already is. On a shell that is not connected to the window manager — and so cannot tell which screen that is — it falls back to asking you to click the screen to record, which is what the recorder module’s own Select a screen does.
The window switcher
Section titled “The window switcher”switch_windows is the only shortcut here that is held rather than pressed. The first press puts an overlay on every screen showing an icon for each open window, five to a row; each further press of Tab moves the highlight, and letting go of Alt switches to whatever it is on. The full title of the highlighted window is written under the grid, which is what tells two windows of the same application apart. Escape, or a click on the backdrop, closes it without switching; a click on an icon switches to that window.
The list is ordered most-recently-used first, so the very first press lands on the window you were in before this one — tap and release to go back and forth between two windows. That ordering comes from the window manager, so a shell that is not connected to it offers the compositor’s own order instead; everything else works the same.
Rebinding is the usual thing with one constraint: keep a modifier in it. What ends the gesture is the modifier coming back up, so a binding with none — switch_windows = "f13" — would leave the switcher on screen with nothing to release. Both keys are read independently, so you can bind them to different modifiers, or set either to "" to turn that direction off.
If the window that is picked is on another workspace, the shell switches to that workspace first and focuses the window second. Both go to the window manager as one request, so nothing can land in between.
Changing these requires restarting the shell. Shortcuts are registered once at start-up; unlike the theme or panel layout they do not reload live.
Changing one without editing the file
Section titled “Changing one without editing the file”The keyboard icon on the bar opens the shortcut sheet, and every one of the above is listed on it under Shell, alongside every binding the window manager has configured. Click one and press the combination you want:
- Esc stops listening and changes nothing;
- Backspace clears the shortcut, the same as writing
""below; - the arrow beside a row you have changed puts it back on its default.
Only the shell’s own shortcuts can be changed from there. The window manager’s bindings are on the same sheet but read-only — they are miracle’s configuration, and they are edited under Settings › Window Manager › Key Bindings.
What you press is written back into config.toml as the text you would have typed yourself, so the file stays readable and hand-editable. Two things the sheet says that the file cannot: it refuses a combination another of the shell’s own shortcuts is already on (the second registration would silently never happen), and it warns — without refusing — when the window manager already uses that combination for something. And because registration latches at start-up, an edited row says so until the shell is restarted.
Syntax
Section titled “Syntax”A shortcut is modifiers and a key joined by +, in any case:
| Part | Accepted spellings |
|---|---|
| Modifiers | ctrl / control, shift, alt, super / meta / win / logo |
| Key | a letter a–z, a digit 0–9, f1–f24, or a named key |
Named keys: space, return / enter, tab, escape / esc, backspace, delete / del, insert, home, end, pageup, pagedown, left, right, up, down, print, pause, menu, poweroff / power, sleep, and the punctuation names minus, equal, plus, comma, period, slash, backslash, semicolon, apostrophe, grave, bracketleft, bracketright.
Left/right modifier variants are deliberately not offered: a trigger fires only when exactly the registered modifiers are held, so binding the left Control key would stop the shortcut working on the right one.
Shift must be written out. "ctrl+S" means Ctrl and the S key — it is read identically to "ctrl+s". Write "ctrl+shift+s" if you want Shift in the combination.
Layouts
Section titled “Layouts”The compositor matches on the character your layout actually produces, so a shortcut containing shift is resolved before it is registered: "ctrl+shift+s" registers S, and "ctrl+shift+1" registers !. That resolution uses a US layout table. On other layouts, shifted digits and punctuation will be wrong — letters are fine everywhere.
Two escape hatches cover the rest:
[shortcuts]open_settings = "ctrl+0x1b" # a raw xkbcommon keysymopen_settings = "ctrl+code:31" # a raw evdev keycode — layout-independentThe code: form binds the physical key, so it keeps working when you switch layouts.
Disabling a shortcut
Section titled “Disabling a shortcut”Set it to an empty string (or "none") to register nothing — useful when a combination collides with an input method such as fcitx or IBus:
[shortcuts]open_settings = ""An unparseable value is not treated as “disabled”: it falls back to the default and logs why, so a typo does not silently cost you a shortcut.
If another client already owns a combination, the shell logs it and moves on — it never fails to start over a shortcut.