Apps With No Overlay
Context-Aware Overlays cover a long list of apps, and every one of them was drawn by hand. For everything else — an in-house tool, a niche editor, the app you happen to use most — PolyKybd now works out what it can on its own, with nothing to install and nothing to configure.
Two things happen together:
- Shortcuts the app advertises get an icon on their key — Ctrl+S gets a floppy disk, Ctrl+B a bold B — read from the same accessibility information a screen reader uses.
- The app’s own icon appears on Escape, on every modifier layer, confirming which app those icons belong to.
The icon on Escape
Section titled “The icon on Escape”PolyKybdHost asks three sources in order and takes the first that survives being reduced to a 1-bit 72×40 keycap:
- The icon the app itself ships — the executable’s own icon on Windows, the
.desktopentry or icon theme on Linux, the bundle’s icon on macOS. Exact by construction, because it is the picture you already associate with that app. - Simple Icons (CC0), the real brand mark where one exists.
- Material Design Icons (Apache-2.0), which covers the Microsoft family that Simple Icons does not carry at all.
Detailed logos rarely survive the reduction, so the host measures each candidate and keeps the one that still reads at keycap size rather than the first that loads.
Icons for the app’s shortcuts
Section titled “Icons for the app’s shortcuts”A well-behaved application already publishes its shortcuts — that is how a screen reader can announce them. PolyKybd reads the same information, matches each label to a concept, and draws a small icon in the bottom-right corner of that key, clear of the key’s own legend.
| Your platform | Where the shortcuts come from | Status |
|---|---|---|
| Windows | UI Automation | Supported |
| Linux | AT-SPI2 | Supported; depends on the app’s toolkit, see below |
| macOS | Accessibility API | Supported (host 1.1.0+), after a one-off permission |
Linux: which apps work
Section titled “Linux: which apps work”What an app publishes depends on its toolkit, so on Linux it varies by app family:
| App family | Example | What PolyKybd gets |
|---|---|---|
| GTK3 with a menu bar | Mousepad | Every shortcut in the menu bar |
| GTK4, version 4.18 or newer | — | The shortcuts its menus show (host 1.16.6+; not yet confirmed on a real desktop) |
| GTK4, older than 4.18 | Ubuntu 24.04’s GTK 4.14 | Nothing: these versions report every shortcut as blank |
| Qt / KDE | Kate | The shortcuts in its menus (host 1.16.6+) |
Nothing breaks when an app publishes nothing — the keyboard simply stays as it was, Escape included.
macOS: one permission first
Section titled “macOS: one permission first”What gets an icon and what doesn’t
Section titled “What gets an icon and what doesn’t”An icon is drawn only when the shortcut’s label maps to a concept the icon set covers — Save, Copy, Paste, Find, Undo, Bold, Print and so on. A label the host cannot place confidently is left alone rather than guessed at, because a plausible but wrong icon is worse than none. Chords the operating system owns (Alt+Tab and friends) are skipped too.
When an app already has artwork
Section titled “When an app already has artwork”If a hand-made overlay covers the app, it wins — but per key, not for the whole window. Every key the artwork draws keeps exactly what its author intended, and the generic icons fill only the keys it leaves blank.
Turn that off (see below) and an app with artwork shows exactly what was drawn for it and nothing else. Both are reasonable: a blank key on a carefully made overlay may be a deliberate choice rather than a gap, which is why it is a switch rather than a rule.
Working on another computer
Section titled “Working on another computer”In a multi-machine setup the app runs on one computer while the keyboard is plugged into another. The shortcuts are read on the machine the app is actually running on and sent across as text, so a forwarded app gets the same icons a local one does.
Settings
Section titled “Settings”All five live in Settings… in the tray menu and are on by default.
| Setting | What it controls |
|---|---|
| Generic → Overlays Enabled | The whole feature. Off: no Escape mark and no shortcut icons for any app. |
| Generic → Overlays Fill Gaps | Whether generic icons also appear on apps that already have artwork, filling only the keys it leaves blank. |
| Shortcut → Icons Enabled | Whether the focused app is read for its shortcuts at all. Off: nothing generic is drawn, since the Escape icon only accompanies shortcut icons. |
| Shortcut → Icon Auto Fetch | Whether the icon set may be downloaded. Off: icons already downloaded keep working; new ones are skipped. |
| Shortcut → Enable Accessibility | Linux only. Whether PolyKybdHost may turn on the desktop’s accessibility switch so Qt and KDE apps publish their shortcuts. Off: only apps that publish anyway (GTK) are read. |
Two of them switch everything off: with Generic → Overlays Enabled or Shortcut → Icons Enabled off, nothing generic is drawn and the other settings have no effect.
Privacy
Section titled “Privacy”Everything happens on your own computer. The host reads the focused app’s shortcut labels locally and never sends them anywhere; the only network request is for the icon set itself, and it is cached after the first time. Nothing about which apps you use leaves the machine.