Repository navigation
This release has important fixes on every platform and adds significant new features including label mode (Mac, Windows, X11, and GNOME Wayland envs (others coming soon)), custom actions, a revamped settings window with a dark theme, and auto-translation of defaults and presets to non-QWERTY layouts.
Feedback always appreciated! (Mac Windows Linux)
Upgrading from v1.1.0-preview.1?
Cheat sheet: To see new features/defaults in action quickly on an existing config, right-click these settings, then Restore default:
- New features:
- Keymap >
Toggle label mode (beta) - Style >
Char background color
- Keymap >
- New defaults
- Style >
Font:Jost (default) - Behavior >
Free mode auto off (seconds):0(disabled, was10) - (On Wayland) Behavior >
Initial overlay monitor:with_mouse
- Style >
An upcoming release will streamline this process in-app.
Enhancements
App window
- Revamped UI, integrated app window
- Settings categories now have separate pages
App window themeon the General page:system,light, ordarkcmd+F/ctrl+Fsearch works across pages
- Import/Export config now available on Linux and Windows (from kebab menu at bottom of settings window, already present on Mac; #577, thanks @DaveuRrr)
🅿️ Find widget (cmd+F/ctrl+F) improvements (#639, thanks @DerRockWolf)- Reaches settings in collapsed Keymap groups
- Pressing
cmd+F/ctrl+Fagain while open selects text - Closing with
Escapefocuses the current match's field - Restores prior state on reopen
🅿️ Because grid and label mode both use an overlay, the keymap'sOverlaysection is now calledGrid mode, and thetoggle/show/hide overlaycommands are nowtoggle/enter/exit grid mode
Custom actions
Custom actions allow you to trigger arbitrary settings changes via hotkey.
Currently there are three types:
set value: sets the setting to one valuecycle value: steps through a list of values;Cycle mode:wrap,reflect, orstopadjust number: creates anincrease/decreasepair of actions; when invoked, the value moves byStepand clamps toMinandMax- a
resetaction is also created whenReset valueis set
- a
To create a custom action, either:
- right-click a setting and choose
Add custom action
OR
- click
+ actionat top of theKeymappage in theCustomsection and choose a target setting
Other fields:
When: determines in what context an action can be invoked;global,overlay,free_mode,label_mode, orno_modeMessage: the toast message shown when it runs —off,default(the setting's name and new value), orcustomtext
Label mode (beta)
Places a label on each clickable element in the frontmost app. Type the label to click the element.
Available on: Mac, Windows, X11, and GNOME on Wayland -- more Wayland environments will be worked on very soon
- On GNOME: log out and back in once after installing, so the Mouseless GNOME Shell extension loads
Actions: toggle label mode, enter label mode, and exit label mode
- Deep links:
toggle-label-mode,enter-label-mode, andexit-label-mode - existing
hold forandcyclecommands pick the mouse action, button, and click count, as they do with the grid- Note: dragging is not yet implemented
- an unbound
ctrl,alt, orcmd/winheld while typing a label is applied to the click, e.g. to open a link in a new tab- A modifier bound to a
hold foraction runs that action instead
- A modifier bound to a
Settings
Style>Labels> BG color, text color, font size, alignmentBehavior>Labels>Label characters🅿️ Defaults toASDFGHJKLXCVBN, so labels stay at 2 characters or fewer for up to 196 elements, and characters should remain alphabetic across languages/layouts
🅿️ On Mac:Behavior>Labels>Label menu bardetermines whether an app's menu bar receives labels
Usage notes / known issues:
- Windows: in Chromium and Electron apps, the first show may label only the app header
- Linux
- the first use turns on AT-SPI accessibility (
IsEnabled), which Chromium, Electron, and Firefox apps need to expose their elements - to improve responsiveness, buttons, toggle buttons, and links in GTK 4 apps are clicked with the cursor, which moves onto them, rather than pressed through accessibility
- in Chromium and Electron apps, labels sit a little right of and below their elements
- in some apps running under XWayland, labels can appear well away from their elements
- X11: GTK 4 apps get no labels
- the first use turns on AT-SPI accessibility (
Keyboard layouts
Note, Windows and X11 existing users: if
Keyboard layoutunderBehavior>Keyboardis blank, keys work as in 1.0 until you clickUpdatebeside it, thenSave; then the behavior described below applies
- New installs now read your layout on first start, as macOS and Wayland already did
- Default grid keys, default keybindings, and built-in presets are now translated to your selected keyboard layout when they are loaded, so intended key positions are preserved, e.g. WASD becomes ZQSD on AZERTY
- Translation also occurs when you click the
Updatelayout button. You can always click the 'restore saved settings' button at the bottom of the window if you don't like the result. - You can disable translation by unchecking
Translate defaults/presets to layoutinBehavior > Keyboard; then QWERTY versions will always load
- Translation also occurs when you click the
- A warning now appears under
Level N keys,Subgrid keys, andLabel characterswhen your layout can't type one of the keys - The grid now distinguishes non-alpha shifted characters, e.g. so
/and?can both be assigned at the same level (#554, thanks @wanyann)- If only one is present, it will be matched regardless of whether shift is held
- Letters are unaffected:
Ais inaccessible ifais at the same level
Grid, overlay, and toast
- Toast window now appears on the screen with the mouse (in free mode) or overlay (#318, thanks @elizabeth-descript)
- Added
Char backgroundfeature for enhanced contrast / legibility (#612, thanks @gihrig @msmouse) - Added
Reverse level 2 keys on right halffeature, for left/right-hand symmetry in certain configurations (thanks @MErkinSag) - New bundled fonts: Jost (default), Jost Italic, QuicheSans
- Known issue, Linux: The cairo overlay (the default on NVIDIA) draws these fonts in the system's sans font
Input (Windows and Wayland)
Alt tapandWin/Super tapcommands no longer trigger native behavior (app menu, start menu or desktop overview)- Mouseless 'masks' the tap by injecting a keypress before the modifier release
- The
Modifier tap mask keysetting determines which key gets injected; default isauto(an unused virtual keycode on Windows, F14 on Linux)
- The
- The native behavior is still available: just hold the modifier for longer than
tap threshold - The
Send 'Escape' after global 'Alt tap' commandis now deprecated and removed from Linux; on Windows, it applies only when the mask key is unassigned 🅿️ On Windows,Ctrl+Shift tapis also masked (switches system keyboard layout by default)
- Mouseless 'masks' the tap by injecting a keypress before the modifier release
Diagnostics
- Debug logging now shows when Mouseless triggers mouse button up/down events (does not log the events' screen position)
Fixes - all platforms
Free mode and drag
- Fixed
hold for dragsending mousedown events when continuing a drag via holding, which kept the next drag from starting in some apps - Fixed free mode timing out while
hold for free modewas held, which let keys pressed afterward reach the app with the hold key's modifier - Fixed free mode toast disappearing when overlay hidden (Windows and Linux, #600, thanks @DerRockWolf)
- Fixed a key assigned to wheel commands ignoring its next press after
hold for free modewas released
Overlay and grid
- Fixed direct mouse-button commands (
right click,back mouse button,forward mouse button) firing instead of selecting a grid cell when their key is also a grid label (#617, thanks @tadsn3w) - Fixed
subgrid nudgekeys doing nothing while ahold forkey bound to a modifier was held, e.g.hold for drag(#603, thanks @DerRockWolf) - Fixed the overlay getting stuck on when opened through a deep link while Mouseless is disabled (#584, thanks @NextMerge)
- Deep links that would show the overlay or enter free mode are now ignored while Mouseless is disabled
- Subgrid nudge: eliminated lag when nudges entered rapidly
Config file
- The settings UI now reports when it can't write the config or presets to disk, naming the target file and the reason, with a button that copies the details (#599, thanks @DerRockWolf)
- Your unsaved changes are kept instead of cleared
- Config and presets files are now written atomically, so a save interrupted by a disk error leaves the previous file rather than an empty one
- A config or presets file that can't be loaded is now kept as
config.yaml.invalid.bakorpresets.yaml.invalid.bakbefore Mouseless falls back to defaults, so a later save no longer replaces it - Fixed config files that can't be written during a version migration being reported as a config that failed to load
- Fixed a config with an invalid
keyboard_layoutfalling back to entire default config; only that entry is reset now
License
- Fixed license check retry logic when the network isn't ready at login (#597, thanks @kchristidis)
- You can now change your license key from the
toolsmenu (useful e.g. for upgrading from subscription to lifetime)
Fixes - macOS
Startup, updates, and config
- Fixed startup issues causing keyboard to be unresponsive when launched at system start
- If you removed Mouseless as a Login Item due to this bug, you can restore it now
- Fixed missing secure input icon and made startup failure handling more graceful/robust (#589, #632, thanks @TyceHerrman, @antoniorodr, and @shpoont)
- Fixed issue where update checker wouldn't retry after network not initially available
- Closing the welcome window before you start a trial or activate now quits Mouseless, instead of leaving it running in background
Overlay and toast
- Fixed grid mode sometimes accepting no cell selections until Mouseless was restarted (#472, thanks @ronnyworm)
- Toast window and free mode indicator now show over a fullscreen app
Input, free mode, and drag
🅿️ Fixedtoggle free modenot exiting free mode while Secure Input is active🅿️ Fixed issues with Mouseless being overly sensitive to rapid screen update events on HDR screens while free mode indicator is enabled (#643, thanks @haikesan)- Fixed system-wide typing stalls, label mode exiting, grid refreshing, and excessive logging
- Fixed the first modifier tap after some shortcuts being ignored, e.g. a
cmdtap to show the overlay aftercmd+shift+]- A workaround for extra modifier events sent by Karabiner-Elements now applies only to keys that come through Karabiner, and only to a tap within 700ms of a shortcut Karabiner handled itself
- Fixed cases where modifier-bound actions switched to non-modifier-bound actions while held (e.g.
shift+ArrowUprunningArrowUp's action after a moment) (#628, #547, thanks @tadsn3w) - Fixed pressing the
Agrid key twice to double-click also typing "a" - Fixed drag and drop sometimes failing when
Move system cursor with virtualis on - Fixed issue where system cursor errantly moved and clamped at edges in pointer-locked situations
- Free mode movement now works in situations where an app only reads unaccelerated event attributes (e.g. some games; pointer lock demo above is one example)
Deep links
🅿️ Partially fixed Mouseless taking focus when activated by a deep link, which can cause click to not reach target app (thanks Lê Hùng Luận)- Mouseless now hands focus back to other app
- Full fix coming soon (no focus change will happen at all)
Fixes - Windows
🅿️ Master opacity(Style) and theincrease/decrease master opacityactions (Keymap) are now available in the settings window (#638, thanks @ksbrar)- Master opacity's value is migrated to
1, as the setting was not active in 1.0 and earlier (and its value was effectively 1)
- Master opacity's value is migrated to
- Switching your system layout no longer moves cells to other keys, e.g. German's
Zcell stays on its key after switching to US (#521, thanks @markifi) - Fixed text copied by Mouseless (version info, diagnostics, error details) starting with an invisible character
- Fixed the settings window opening without keyboard focus from a hotkey or deep link
- Webview2 runtime
- Mouseless now explains when the runtime is missing, rather than failing with an unhandled exception
- A 'Fixed Version WebView2' runtime placed in a
WebView2Runtimefolder besidemouseless.exeis now picked up, so a machine with no internet access can run without the Evergreen runtime- Setup: WebView2 Runtime
Fixes - Linux
Input
-
Fixed keys typed on the overlay reaching the app when
Move system cursor with virtualandFree mode after moveare both on- Over USB, this needs a new udev rule: run step 2 of Method 1 again, or step 4 of Method 2, in Enabling keyboard/mouse access on Wayland
-
--list-input-devicesnow shows what each device can do (keyboard, pointer, wheel, etc.) -
🅿️ FixedFree mode after moveturning free mode on only for the first move when isMove system cursor with virtualon with thewebviewoverlay renderer (#620, thanks @msmouse) -
🅿️ Fixed free mode's keys also typing into the focused app after a grid move made while free mode was on, withFree mode after moveon -
🅿️ Keyboards plugged in after startup can now work with Method 2 of Enabling keyboard/mouse access on Wayland: run its new step 5 (#577, thanks @lasseleegaard) -
Dead keys now work as grid keys and hotkeys, as their own character, e.g.
^on German and'on US International- A config from 1.0 needs you to click the
Updatebutton first
- A config from 1.0 needs you to click the
-
Wayland
- Fixed pointer events from combined keyboard+pointer devices being swallowed (#627, #577, thanks @twiggshub, @NikhilAlapati, and @Bouhtouch)
- Fixed a
hold foraction's modifier reaching the app while held (#594, thanks @DerRockWolf) - Fixed
exit free modehotkey leaking through to underlying app (#624, thanks @jorikvanveen and @HarrisRamosBaroni) - When
Excluded input devicesmatches every keyboard, an alert now says so and Mouseless keeps running, picking the keyboard up once its entry is removed; before, it showed "No Keyboards Found" and quit - Fixed a crash when the keyboard layout is read during sessions without XWayland (#596, thanks @DerRockWolf)
- Fixed Mouseless intermittently dropping a keyboard and no longer responding to it
- Fixed
Clear keyboard statenot releasing a stuck drag, e.g. one left by a key release missed during an app switch or sleep/wake
-
X11
Overlay monitor and toast
- Wayland:
with_mousenow works forInitial overlay monitor(#604, thanks @DerRockWolf)- On niri it follows keyboard focus
- GNOME: the toast now follows the active workspace (#606, thanks @HarrisRamosBaroni)
- Fixed the toast sometimes appearing under the overlay
🅿️ Fixed pixelated grid text on scaled displays, e.g. 200%, with thecairooverlay renderer, the default on NVIDIA (#639, thanks @NikhilAlapati)
Settings window
- Fixed blank Settings pages on affected NVIDIA Flatpak installations (#635, #577, thanks @Andlon and @virtual256)
- If you previously set
use_dmabuf: falseindebug_options, remove that override to use this fix
- If you previously set
Diagnostics
🅿️ Fixed the Flatpak's--diagnosticsoutput and log naming the Flatpak runtime, e.g. "GNOME 50", instead of your distro🅿️ --diagnosticsnow shows the desktop environment, e.g.KDEorGNOME🅿️ FixedCopy state diagnosticsshowing "Copied diagnostics to clipboard" when the copy failed🅿️ In the Flatpak, copying to the clipboard isn't supported yet; a failed copy now says so, instead of asking you to installxcliporxsel🅿️ --list-input-devicesnow lists devices Mouseless can't read, markedunreadable, instead of leaving them out🅿️ Logging now warns when Mouseless can't read a keyboard
🅿️ Notes for preview.1 users
This whole section applies to v1.1.0-preview.1 users, in addition to the
Settings window
- Renamed
Alt/Win tap mask keytoModifier tap mask key- On Wayland,
autonow uses F14 instead of F24 - Single digits still name keys; use a leading zero, e.g.
01or001, for keycode 1
- On Wayland,
- Empty
Customgroups in the Keymap no longer look clickable - Keymap groups with no commands on your platform are no longer shown
Label mode changes
- Added
XCVBNto the defaultLabel characters- Configs still using the old default are updated, including defaults translated to the assigned keyboard layout
- Shift now works as a label-click modifier when it isn't bound to a
hold foraction - Labels that start with the same character are now spread out (reduces overlap after first keypress)
- Linux:
shift+ControlLeft tapis now the defaulttoggle label modebinding
Mac fixes
- Fixed
close UI element(Escapeby default) not closing Mouseless's own alerts - Removed the Secure Input alert at system login (secure input sometimes stays active for up to ~6 seconds); the status icon will show a padlock while it's active (#637, thanks @skovtunenko)
Windows fixes
- Fixed the Settings window stealing focus from startup alerts
- Fixed startup errors closing the app before their alert appeared
- Fixed
Master opacity(Style) and theincrease/decrease master opacityactions (Keymap) not being shown in the settings window (#638, thanks @ksbrar)
Linux fixes
- Fixed the grid staying small in the upper-left corner when label mode was the first thing used after starting, with the
webviewoverlay renderer, the default without NVIDIA - Fixed the Flatpak's GNOME Shell extension installing to incorrect location, so labels never showed even after logging out and back in (#639, thanks @mikaelmantel)
- Startup logs no longer call the extension enabled before GNOME Shell has loaded it
- Wayland: Fixed the pointer of a combined keyboard+pointer device moving slower or faster while Mouseless runs (#627, thanks @fiskhest)
- USB devices need the new udev rule: rerun step 2 of Method 1 or step 4 of Method 2 in Enabling keyboard/mouse access on Wayland
- Hyprland per-device settings need a second
deviceblock for the virtual device shown byhyprctl devices; see Pointer speed troubleshooting