Skip to content

Choose a tag to compare

@github-actions github-actions released this 13 Oct 17:20
· 166 commits to main since this release

New features and improvements

Many thanks to @masasj for a large part of this build: the indicator layers and animations grew out of the proposal in #103, and the detailed reports in #99, #100 and #109 led to several of the fixes and to the exit and restart commands.

  • Indicator layers: the indicator can be any number of layers, each a shape with a fill and a stroke: circle, triangle, rectangle, star, line, cross, a path through your own points, or text. A stroke can be partial, dashed and capped, corners can be rounded, and a layer can be rotated, offset, put at a corner of the cursor or at the center of the screen, or left where it appeared instead of following the mouse. <mode>.indicator is the main layer and <mode>.<name>-indicator adds another.

    normal-mode.ring-indicator.enabled=true
    normal-mode.ring-indicator.size=40
    normal-mode.ring-indicator.fill-opacity=0
    normal-mode.ring-indicator.stroke-thickness=2
    normal-mode.ring-indicator.stroke-dash-length=6
    normal-mode.ring-indicator.stroke-dash-gap=4
    normal-mode.ring-indicator.stroke-cap=round

    The fill, stroke and shadow colors take gradients, and a color alias can share one gradient between the indicator and the hint boxes.

  • Animations: an animation is a named clock that combos start and stop, and any indicator property can follow it with keyframes, each a time (a percent or milliseconds), a value and an easing. current starts from whatever the property was showing, so one animation picks up where another left off. An animation can repeat, loop or play back and forth, and while it runs it reads as a held key that combos and other properties can react to (#103).

    click-burst-animation.duration-millis=500
    _indicator-mode.click-burst-animation.start=+isleftmousepressing | +ismiddlemousepressing | +isrightmousepressing
    _indicator-mode.indicator.size=26 | _{clickburstanimation} -> 0% 13; 100% 78 exponential-out-10
    _indicator-mode.indicator.stroke-opacity=1 | _{clickburstanimation} -> 0% 1; 250ms 1; 500ms 0 0.7

    hide-cursor takes keyframes too. Two easings are new: exponential-out-<n>, fast then settling, and step, which holds a value until the next keyframe.

  • An animated indicator in every shipped configuration: the indicator pops in from a dot when mousemaster is activated and folds back into one when it is deactivated. A click bursts into a thinning ring that fades away, and a button held down keeps a glowing ring until it is released.

    The indicator popping in, a click, a double-click, a click held down, and the indicator folding away

  • Cheatsheets: a layer with a text on a shape shows rich text in a box, styled with a CSS text-style-sheet, and {alias} writes the keys of a key alias. Every shipped configuration now has a cheatsheet of its keys: hold t in neo-mousekeys-ijkl and neo-mousekeys-wasd, or F1 in mouseable, warpd and neru, while mousemaster is active (#107).

    The neo-mousekeys-ijkl cheatsheet

    The neo-mousekeys-ijkl cheatsheet, shown while t is held.

  • Exit and restart: the exit command stops mousemaster from a combo, and restart starts it again the same way it was launched. Either way, the keys its macros hold and the mouse buttons it pressed are released first (#109).

    normal-mode.exit=+leftctrl +leftalt +q
    normal-mode.restart=+leftctrl +leftalt +r
  • The indicator out of screenshots: indicator.exclude-from-capture=true keeps the indicator out of screenshots and screen recordings while it stays on screen. Like any indicator property, it can depend on a combo or an animation.

  • Vision UI hints in the shipped configurations: neo-mousekeys-ijkl, neo-mousekeys-wasd and neru now show vision hints instead of accessibility hints, and their boxes are colored by one gradient across the screen.

  • Shorter hint labels: UI and position history hints take a single key wherever they can. With a few more hints than hint keys, most hints still take one key instead of all of them taking two.

  • Upgrading: the old indicator properties are refused with a message naming their replacement: color and opacity are now fill-color and fill-opacity, the outlines are the layer's stroke (a second outline is a second layer), edge-count is shape, the label is a shape=text layer, and the fades and transitions are animations.

  • Fixes:

    • A key whose release goes missing is released within a second, so it no longer blocks combos (#100).
    • With HDR or Windows' auto color management on, zoom shows the magnified desktop again and vision hints see its real colors (#106). Where the desktop cannot be magnified, the hints are laid out unzoomed instead of over an empty zoom.
    • A jump of the mouse while a button is held starts slowly, so a dragged window keeps up with it (#99).
    • Logging no longer runs on the keyboard hook, so writing the log cannot delay key events long enough for Windows to drop them. A hook that slow is logged as a warning.
    • Vision hints no longer detect the indicator.
  • Also: The indicator documentation covers layers and animations.

Installation on Windows

  1. Download mousemaster.exe (a portable executable).
  2. Download one of the existing configuration files:
  3. Place the executable and the configuration file in the same directory.
  4. Rename the configuration file to mousemaster.properties.
  5. Run mousemaster.exe: make sure to run it as administrator if you want the mousemaster overlay to be displayed on top of everything else.
  6. Feel free to open a GitHub Issue or join the Discord if you need help creating your own configuration. If you have ideas for a better configuration that you would like to share, I'd love to hear from you.
  7. If you enjoy mousemaster, consider making a donation or stop by the Discord to show your support!

Installation on macOS

mousemaster reads the keyboard through the Karabiner virtual HID device, so that driver and a few permissions are needed.

  1. Install Karabiner-Elements, which installs the virtual HID device, and allow its system extension when macOS asks.
  2. Download and unzip mousemaster-macos.zip, then put mousemaster.app in /Applications.
  3. mousemaster is not signed or notarized, and macOS refuses to start a quarantined app that is not notarized. A browser download marks it as quarantined, so clear that before the first launch: xattr -dr com.apple.quarantine /Applications/mousemaster.app. Or let macOS refuse it once, then allow it under System Settings > Privacy & Security > Security, where an Open Anyway button appears for it.
  4. Download one of the configuration files above, place it in /Applications next to mousemaster.app, and rename it to mousemaster.properties.
  5. Run it from a terminal, as root, which the virtual HID device requires. The configuration is read from the working directory, so start it from where you put it: cd /Applications && sudo mousemaster.app/Contents/MacOS/mousemaster
  6. Grant the permissions macOS asks for, under System Settings > Privacy & Security, then quit and relaunch:
    • Input Monitoring, to read the keys you press. Always needed.
    • Accessibility, only for UI hints (hint.type=ui).
    • Screen Recording, only for zoom (mode.zoom).

License

mousemaster.exe and mousemaster.app embed Qt and QtJambi, used under the GNU Lesser General Public License. Run mousemaster with --licenses for the third-party notices and the full license texts.