<span class="mw-page-title-main">Keystrokes</span>
Fabrice P. Lauss𝕪s iggurat Web

Keystrokes

keystrokes are my personal shortcuts. I tend to optimize everything, so I have a lot, including bizarre ones (e.g., Alt Gr+Shift+U). I use keymapper as the linux application to control most of my keyboard shorcuts. Below I list the controllers in use, by controller keys, naming the keys as they are engraved on my French (AZERTY) keyboard—which is not always how they read in keymapper.conf: there, {A}, {W}, {Semicolon}, etc., are scan codes (US positions, unaffected by the layout), so {A} is my Q, {W} is my Z and {Semicolon} is my M, while quoted characters such as 'a' are read through the layout and mean the key that really types a.

Ctrl + Alt

Every Ctrl + Alt shortcut in one place, by the letter as it is engraved on the keyboard: the bare combination, and the two variants that add ShiftRight or Alt Gr.

Key Ctrl + Alt + ShiftRight + Alt Gr
A the {{AI}} skeleton, laid out over five lines with the cursor waiting on the q= (that key is {Q} in keymapper.conf)
B bibTeX sci.bib bibTeX ISO4
C {{cite|}} {{onlinecite|}} {{citet|}}
D dates2wiki, the selected date becomes {{thisday|5|September|2024}} (a KDE shortcut, not keymapper)
E the Spanish keyboard layout (a KDE shortcut, not keymapper)
F the French layout, i.e., back home (idem)
G <syntaxhighlight lang=""></syntaxhighlight>
H html2md: the browser copy comes back as wikitext, ready to paste into a page (H for html) html2md again, but as Markdown with every | written {{!}}: the form the a= of {{AI}} needs
I EVE, the clipboard image goes to the local wiki as lw-stamp.jpg, squeezed under 800 kB (a KDE shortcut, not keymapper) EVE again, but always with her dialog: preview, quality, tooltip (a KDE shortcut, so either Shift)
J free
K this very page, in Chrome (the local wiki) keymapper.conf
L LocalSettings.php of the local wiki
M \mathbf{}, cursor between the braces (M for mathbf; it used to type ñ, which stays on Alt Gr + N) \mathbb{}, cursor between the braces
N <nowiki></nowiki>
O <blockquote></blockquote>
P <pre></pre> <poem></poem>, its block-level neighbour, cursor on the empty line between them
Q {{quote|}} {{onlinequote|}}
R == References ==<references /> {{citer|}}
S the Russian layout (idem)
T <tt></tt> <code></code>, the longer form of the same idea
U free tex2uni, the selected LaTeX comes back as Unicode (a KDE shortcut, so either Shift)
V free
W mdtable2wiki, the table on the clipboard—copied from a browser, from Claude or from the Claude Code console—comes back as a wikitable (that key is {Z} in keymapper.conf) mdtable2wiki again, but with every structural pipe as {{!}}, so that the table can sit inside the a= of {{AI}}
X free
Y free gotoYouTube, jumps to the window (and tab) that is playing, typically YouTube
Z wz <wz tip="">(?!)</wz> <wz tagtotip=></wz><span id=""></span>

A plain keymapper rule matches with any extra modifier, so where the ShiftRight column is empty the bare action fires all the same: Ctrl+Alt+Shift+T is <tt></tt> just like Ctrl+Alt+T. Only the rows carrying a ShiftRight action of their own do something different. That is also why a ShiftRight rule has to sit above its plain counterpart in keymapper.conf.

Ctrl + Shift

  1. Space → &nbsp;
  2. V → a middle click (xdotool click 2), which pastes the primary selection where the pointer is (a KDE shortcut, not keymapper)

Ctrl + Alt Gr + Shift

Just V: BURN-E welds the link on the clipboard around the selected text—clipboard [[August_(2026)#Y-00hMp]] plus selected "this bit" pastes [[August_(2026)#Y-00hMp|this bit]], and puts the link back on the clipboard so the next bit can hang off the same anchor. The selection is read from PRIMARY, so nothing has to be copied first. Alt Gr is what keeps this clear of Ctrl+Shift+V above (paste primary, in KDE)—and is why it cannot be a KDE shortcut either: Qt has no Alt Gr modifier.

Win (Meta)

Everything the Win key does, gathered from the live KDE registry (kglobalaccel). The left and right Win keys are the same key: X puts Super_L and Super_R both in mod4, so every combination below fires from either. Note that none of these are minekeymapper.conf has no Meta rule at all, so the Win key is entirely KDE's territory (unlike Ctrl+Alt, which is mine).

Key Meta + + Ctrl + Alt + Shift + Ctrl + Shift
Quick Tile Window to the Left (KWin) Switch One Desktop to the Left (KWin) Switch to Window to the Left (KWin) Move Window to Previous Screen (KWin) Window One Desktop to the Left (KWin)
Quick Tile Window to the Top (KWin) Move Up (KWin) Switch to Window Above (KWin) Window One Desktop Up (KWin)
Quick Tile Window to the Right (KWin) Move Right (KWin) Switch to Window to the Right (KWin) Move Window to Next Screen (KWin) Window One Desktop to the Right (KWin)
Quick Tile Window to the Bottom (KWin) Switch One Desktop Down (KWin) Switch to Window Below (KWin) Window One Desktop Down (KWin)
PgUp Maximize Window (KWin)
PgDn Minimize Window (KWin)
Print Capture Active Window (Spectacle) Capture Window Under Cursor (Spectacle) Capture Rectangular Region (Spectacle)
Return Konsole (Konsole)
Esc System Monitor (System Monitor) Kill Window (KWin)
Space
1 … 9, 0 Activate Task Manager Entry 1 … 10 (plasmashell)
A Walk through activities (plasmashell) Activate Window Demanding Attention (KWin) Walk through activities (Reverse) (plasmashell)
B Switch Power Profile (Power Management)
C Toggle Cube (KWin)
D Peek at Desktop (KWin)
E Dolphin (Dolphin)
F Map to fullscreen (Wacom Tablet)
G Toggle Grid View (KWin)
K Switch to Next Keyboard Layout (Keyboard Layout Switcher)
L Lock Session (Session Management) Switch to Last-Used Keyboard Layout (Keyboard Layout Switcher)
M Toggle between all screens (Wacom Tablet)
N Next profile (Wacom Tablet)
P Switch Display (Display Configuration) Previous Profile (Wacom Tablet) Move keyboard focus between panels (plasmashell)
Q Show Activity Switcher (plasmashell)
R Record Rectangular Region (Spectacle) Record Window (Spectacle) Record Screen (Spectacle) Record Rectangular Region (Spectacle)
S Stop Current Activity (plasmashell) Toggle the Stylus Tool Relative/Absolute (Wacom Tablet) Toggle Screen Reader On and Off (Accessibility) Launch Spectacle (Spectacle)
T Toggle Tiles Editor (KWin) Enable/Disable the Touch Tool (Wacom Tablet)
V Show Clipboard Items at Mouse Position (plasmashell)
W Toggle Overview (KWin)
X Automatic Action Popup Menu (plasmashell)
F5 Move Mouse to Focus (KWin)
F6 Move Mouse to Center (KWin)
F9 HTML to Markdown (HTML to Markdown)
+ Zoom In (KWin)
- Zoom Out (KWin)
= Zoom In (KWin)
. Emoji Selector (Emoji Selector)

Also Meta+Ctrl+Alt+Shift+Space for the Emoji Selector, the one combination that does not fit the columns above.

Still free on the bare Win key: H, I, J, O, U, Y, Z.

Alt Gr

The Alt Gr shortcuts are sometimes good by default, but rarely so, e.g., one never needs ¬, ŧ, ø, ¤, ð, đ, ŋ, ̉ (the modifier for ả, ẻ, ỏ which are cute, but one also doesn't need those), ł (besides, mapped on two keys: l and z), ¢, „, “, ”,' (another modifier but as French I have the letters é, è, à, ù, etc.), •, ·, . ̣̣̣(the modifier for ạ, ẹ, etc.), and only very rarely needs æ (Læticia), ħ (not even the Physics one which is the tilted ℏ), etc.

This also applies to the Alg Gr + Shift keys: ¬⅛£$⅜⅝⅞™±°¿Æ<¢—Ŧ¥↑ıØÞΩẞЪŊĦ ̛&Łºǎ㦣>©‚‘’˝÷, etc.

Instead, my shorcuts are:

  • Alt GR+
  • ² (was ¬) →
  • & (was ¹) →
  • é (stays ~)
  • " (stays #)
  • ' (stays {)
  • ( (stays [)
  • - (stays |)
  • è (stays `)
  • _ (stays \)
  • ç (stays ^)
  • à (stays @)
  • ) (stays ])
  • = (stays })
  • a (was æ) → α
  • z (stays «)
  • e (stays €)
  • r (was ¶) → ρ
  • t (was ŧ) → τ
  • y (was ←) →
  • u (was ↓) → ν
  • i (stays →)
  • o (was ø) →
  • p (was þ) → π
  • ^ (was ü) →
  • $ (was ¤) →
  • q (was @) →
  • s (was ß) → σ
  • d (was ð) → δ
  • f (was đ) → φ
  • g (was ŋ) → γ
  • h (was ħ) → η
  • j (was ả) → ψ
  • k (stays ĸ)
  • l (was ł) → λ
  • m (stays µ)
  • ù (was â) →
  • * (was à) →
  • < (was |) →
  • w (was ł) → ω
  • x (stays »)
  • c (was ¢) → χ
  • v (was „) →
  • b (was “) → β
  • n (was ”) → ñ
  • , (was á) →
  • ; (was •) →
  • : (was ·) →
  • ! (was ̣a) →
  • Alt GR+Shift+
  • ² (was ¬) →
  • & (was ¡) →
  • é (was ⅛) →
  • " (was £) →
  • ' (was $) →
  • ( (was ⅜) →
  • - (was ⅝) →
  • è (was ⅞) →
  • _ (was ™) →
  • ç (stays ±)
  • à (was °) →
  • ) (was ¿) →
  • = (was ą) → \equiv (the LaTeX ≡, on the key already engraved with two of its three bars)
  • a (was Æ) → the {{AI}} skeleton as well, the older home for it
  • z (was <) →
  • e (was ¢) → ϵ
  • r (was ®) → —
  • t (was Ŧ) → θ
  • y (was ¥) →
  • u (was ↑) → zubizarretacasalengua
  • i (was ı) → ←
  • o (was Ø) → Θ
  • p (was Þ) → Π
  • ^ (was å) →
  • $ (was ā) →
  • q (was Ω) →
  • s (was ẞ) → Σ
  • d (was Ð) → Δ
  • f (was ª) → Φ
  • g (was Ŋ) → Γ
  • h (was Ħ) → Ξ
  • j (was ̛) → Ψ
  • k (was &) →
  • l (was Ł) → Λ
  • m (was º) →
  • ù (was ž) →
  • * (was ĕ) →
  • < (was ¦) →
  • w (was Ł) → Ω
  • x (stays >)
  • c (was ©) →
  • v (was ‚) →
  • b (was ‘) → \boldsymbol{}
  • n (was ’) → ν
  • , (was ű) → \,, (the LaTeX thin space before punctuation, to close an equation)
  • ; (was ×) → \,. (idem with the full stop; that key is . with Shift, which this shortcut already holds)
  • : (stays ÷)
  • ! (was ̣ȧ) → ( ಥ ʖ̯ ಥ)

Fn keys

The bare function row is left to the applications, which is where those keys are worth most. My own applications sit on Alt Gr and other modifiers instead.

Key alone (the application's own) Ctrl + Alt + Meta + Alt Gr + also
F1 Help; in Emacs help-command Switch to Desktop 1 Application Launcher Emacs
F2 Rename, in Dolphin Switch to Desktop 2 KRunner Inkscape
F3 Find Next; in Emacs start recording a macro Switch to Desktop 3 Window Operations Menu Mathematica
F4 in Emacs end and replay the macro; terminal panel in Dolphin Switch to Desktop 4 Close Window System Settings
F5 Reload, in every browser and in Dolphin Move Mouse to Focus System Monitor
F6 Move Mouse to Center Kazam
F7 Spectacle—a global grab, so no application sees it Present Windows (window class) Spectacle also on Meta+Shift+S and Print
F8 Chrome
F9 Places panel, in Dolphin Present Windows (current desktop) html2md Firefox
F10 Present Windows (all desktops) Konsole Konsole also on Meta+Return
F11 fullscreen; in Emacs toggle-frame-fullscreen Claude desktop
F12 developer tools, in Chrome and Firefox Show Desktop this very page, in Chrome also on Ctrl+Alt+K; Alt+Shift+F12 suspends compositing

The Fn layer proper—the brightness, volume and similar symbols printed on that same row, reached by holding the Fn key—is a different thing altogether: it is firmware and kernel business, emits XF86 keysyms, and is not configured here at all.

The Alt Gr column is the one thing on this page that cannot be a KDE shortcut: Qt has no Alt Gr modifier at all—QKeySequence("AltGr+F1") parses to an empty sequence—so keymapper, which sees the key as plain AltRight down at the evdev level, is the only thing able to bind it. Other things in the table are ordinary global shortcuts from kglobalshortcutsrc. Being global grabs, those are swallowed before the focused window ever sees them and no application can win one back; there is no per-application exception to configure, which is the whole reason for leaving the bare row alone. The Emacs bindings above were read out of Emacs itself rather than remembered; F5 to F9 and F12 are genuinely unbound there, which is what made F8 and F9 the cheap ones to take. F8 and F12 go through google-chrome-wrapper rather than Chrome itself, so they keep the fix for the omnibox race. Flameshot, which used to hold F11, now has no shortcut at all. Left free on this row, should I want them: all the plain Shift and Alt Gr + Shift combinations, Ctrl+F5 to F6, Ctrl+F8, Ctrl+F11, Alt+F5 through Alt+F12, and Meta+F1 to F4, F7, F8, F10 to F12.

Gaming Keyboard (◯△□✕)

Gaming keyboard keys mapped via xbindkeys (~/.xbindkeysrc) using keycode+modifier syntax.

Key Keycode X11 Keysym Binding Behavior
◯ (Circle) 191 XF86Tools af-type Types the current AF tag (5 base62 characters) where the cursor is. The tag changes every second, so af runs at press time and the result is injected through keymapperctl
△ (Triangle) 192 XF86Launch1 Open Keystrokes Opens this page in Chrome on current desktop (existing window if available, new session otherwise)
□ (Square) 193 XF86Launch2 Unassigned Ready for configuration
✕ (X) 194 XF86Forward texin.py Opens the tex2uni window: type a TeX fragment, get the Unicode on the clipboard. Redundant with Ctrl+Alt+Shift+U, which stays

Implementation

  • Script: /home/laussy/bin/chrome-keystrokes — opens Keystrokes on current desktop without switching
  • Script: /home/laussy/bin/af-type — runs af and types the tag it returns (bound to ◯)
  • Two traps when a gaming key types text: xbindkeys fires on key down, so the key is still held while the characters go out and most of them are swallowed — release it (xdotool keyup XF86Tools) and let it settle first. And inject with keymapperctl --type rather than xdotool type: it goes through keymapperd's virtual device, so applications that filter synthetic input cannot tell it from the keyboard. keymapperctl exits 1 even when it has typed correctly, so never test its status.
  • Config: ~/.xbindkeysrc with keycode+modifier syntax: c:192 + m:0x0
  • Discovery: keycodes via xev (window focused), X11 keysyms confirmed after xmodmap
  • Reload: pkill xbindkeys; xbindkeys &

Why xbindkeys not keymapper

Keymapper doesn't support XF86Launch5/6, XF86Tools, or XF86Forward directly. xbindkeys accepts them via c:keycode + m:modifier syntax. Keys work in Emacs, confirming X11 reach.