All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
Version 4.9.1 - 2024-11-24
- Added
@done
directive to stop parsing configuration.
- Fixed immediately releasing (e.g.
A >> B !B
). !Any
checks previously matched (e.g.A{Any !Any} >> Meta{Any}
) (#187).- Improved swapping mouse wheel directions (delta of input is used) (#184).
- Fixed Next key info when key name is unknown.
- Next key info also shows wheel events.
Version 4.9.0 - 2024-11-15
- Added builtin macro
default
(#176). - Added macro actual parameter
$$
(#176). - Added builtin macro apply (#177).
- Added
@macos-iso-keyboard
directive. keymapperctl --type
expands$(commands)
under Windows.
- Updated Karabiner VirtualHIDDevice to version 5.0.0 (#178).
- Looking for config in
$XDG_CONFIG_HOME
first (#180). - Deprecated
;
as start of comment.
- Fixed build on MacOS (#179).
- Improved coexistence with Karabiner-Elements (#172).
- Fixed invalid index lookup on null object in KWin script.
Version 4.8.2 - 2024-09-02
- Added logical key
Alt
.
- Allow to override keys with aliases. e.g.
Alt = AltLeft AltGr = AltRight
Version 4.8.1 - 2024-09-05
- Added @forward-modifiers directive (#174).
- Implemented
grab-device
directive support on MacOS (#166).
Version 4.8.0 - 2024-09-01
-
Added
keymapperctl
operations--input
and--output
for injecting key presses. e.g.:keymapperctl --input Shift{A} B C
with
--input
the mappings are applied as if the sequence came from an input device, with--output
the sequence is output as if it was generated by keymapper (#170).
Version 4.7.3 - 2024-08-31
- Fixed mouse wheel breaking
?
input expressions.
Version 4.7.2 - 2024-08-24
- Added
WheelLeft
andWheelRight
for horizontal mouse wheels.
- Swapped
WheelUp
andWheelDown
on Windows.
- Fixed leaking of unmapped mouse input on Windows.
Version 4.7.1 - 2024-08-19
-
Added string interpolation, which works in strings, terminal commands and regular expressions. e.g.:
VAR = "World" A >> "Hello ${VAR}" # $VAR also works
-
Allow to split a line with a
\
at the end. e.g.:Shift{A} >> \ Control{B}
- Aliases are no longer automatically substituted in terminal commands (use string interpolation).
- Fixed too eager macro evaluation.
Version 4.7.0 - 2024-08-17
-
Allow to define top-level macros:
macro = $0 >> $1 macro[A, B]
-
Added builtin macros
repeat[EXPR, N]
,length[STR]
,add/sub/mul/div/mod/min/max[A, B]
. -
Apply further argument list to result of macro. e.g.:
case1 = $0 case2 = $0 $0 switch = case$0 A >> switch[2][B] # switch generates case2, which is called with second argument list
-
Implemented
@grab-device
directive support on Windows.
-
@allow-unmapped-commands
also ignore mappings of undefined commands. e.g.:@allow-unmapped-commands command >> A
-
Added KDE6 support to keymapper KWin script.
Version 4.6.0 - 2024-08-07
- Allow string literals in input expressions. e.g.
'Abc' >> B
. - Added
@allow-unmapped-commands
and@enforce-lowercase-commands
directives.
- Keep key held when pressed immediately after
!Any
.
- Fixed
#
and]
in terminal commands and macros. - Allow to undo ! in input. e.g.
!Shift A Shift{B}
- Preserving order of hold back output.
- Fixed MacOS build.
Version 4.5.2 - 2024-07-28
- Looking for
keymapper.conf
in an optionalkeymapper
subdirectory.
@include
looking up relative paths next to configuration file.
Version 4.5.1 - 2024-07-28
- Expanding ~ and variables in
@include
directive.
- Fixed
@grab-device
directives.
Version 4.5.0 - 2024-07-27
- Added
@grab-device
... directives. - Added
@include
directive. - Showing system in "Next Key Info".
- Allowing hyphens in identifiers.
- Grabbing keyboards with mouse axes on Linux.
Any
no longer matches mouse buttons/wheel.
Version 4.4.5 - 2024-07-18
- Not reevaluating
?
inputs when context becomes active (#161). - Prevent infinite loop when two
ContextActive
toggle each other.
- No longer setting description of all executables to "Keymapper" on Windows (they were indistinguishable in task manager #161).
Version 4.4.4 - 2024-07-14
- Prevent key state validation from resetting virtual key state on Windows.
Version 4.4.3 - 2024-07-14
- Defined behavior of
!Virtual
in output to always release (#156). - Fixed toggling virtual key set by
ContextActive
(#156). - Fixed string typing occasionally releasing virtual keys (#156).
Version 4.4.2 - 2024-07-09
- Fixed potentially hanging key (#153).
- Improved not-timeout with modifier. e.g
A{B{!500ms}} >> C
(#153). - Improved nested modifiers e.g.
A{B{C} D{E}}
. - Prevent modifier in group e.g.
(A B{C})
.
Version 4.4.1 - 2024-07-26
- Not always grabbing mice with keyboard keys on Linux (#152).
Version 4.4.0 - 2024-06-10
- Added multiple stages.
- Added
keymapperctl --type
.
- Shutdown keymapperd on version mismatch (#149).
- Prevent not supported virtual keys in ? input expressions.
- Revert swapping mixed up
IntlBackslash
andBackquote
keys on MacOS workaround (#150). - Improved
!Any
in output.
Version 4.3.1 - 2024-05-18
- Building Linux packages with
libayatana-appindicator3
.
- Fixed shutdown when no devices could be grabbed on Linux.
Version 4.3.0 - 2024-05-16
- Allow input expressions to begin with
?
to prevent might match. !Any
in output releases all pressed keys.- Using
libayatana-appindicator
instead oflibappindicator
when available.
- Not reconnecting in keymapperctl when
--instance
is set.
- Improved mouse wheel handling.
Version 4.2.0 - 2024-05-08
- Added "Next Key Info" tray menu item.
- Added
keymapperctl
action--next-key-info
. - Added
device_id
context filter. - Added mouse wheel keys
WheelUp
andWheelDown
.
Version 4.1.3 - 2024-05-01
- Added keymapperctl --set-config.
- Added --no-notify keymapper argument to disable notifications.
- Creating config file when opened using tray icon on Linux.
- Fixed forwarding on cancelled sequence/group.
Version 4.1.2 - 2024-04-24
- Fixed device filter on MacOS.
- Fixed forwarding of FN keys on MacOS.
- Fixed slowly appearing tray icon menu on Linux.
Version 4.1.1 - 2024-04-19
- Added "Devices" entry to tray icon menu.
- Always using Interception when available on Windows.
- Fixed tray icon Linux.
Version 4.1.0 - 2024-04-17
- Added keymapper tray icon for Linux (#126).
- Further improved selection of key releasing a triggered output (#122).
- Fixed logical keys in context modifiers (#128).
- Fixed ContextActive with fallthrough contexts.
Version 4.0.2 - 2024-04-11
- Improved selection of key releasing a triggered output (#122).
- Improved forwarding of input when a potential match fails.
Version 4.0.1 - 2024-04-09
- Fixed input timeouts on Linux (#91).
- Fixed ContextActive with output on release (#91).
- Restored substition of aliases in terminal commands (#91).
- Fixed error notifications on Linux.
Version 4.0.0 - 2024-03-28
- Added virtual key
ContextActive
(#91). - Added aliases with parameters (#91).
- Added
keymapperctl
application (#105). - Added device filter support on Windows using
Interception
(#107). - Allow to invert context filters with !=.
- Consecutive blocks share mappings (#103).
- Ignore aliases defined in contexts of other systems.
- Completely resetting state of virtual keys when updating the configuration.
- Setting
keymapper
process priority to high on Windows - Exiting when config is invalid and not reloaded on Windows (#114).
- Allow to separate context filters with comma.
- Fixed groups with not timeout (#121).
- Not grabbing gamedevices on Linux (#119).
- Fixed starting multiple terminal commands at once.
Version 3.5.2 - 2024-01-24
- Fixed device filters when devices are changing (#41).
- Fixed process starting on Windows (#102).
- Interpreting escape sequence only in character typing string literals (\n, \r, \t).
Version 3.5.1 - 2024-01-19
- Added keys
Again
,Props
,Undo
,Select
,Copy
,Open
,Paste
,Find
,Cut
,Help
,Sleep
,WakeUp
,Eject
,Fn
(currently only on Linux #85).
- Applying context updates even when a key is hold (#99).
- Improved keymapperd shutdown signal handing (#101)
- Hold Virtual keys could prevent context updates (#41, #99).
Version 3.5.0 - 2024-01-16
- Added diacritic support to string typing on Windows.
- Allow context filters to contain aliases.
- Improved bringing spawned applications to front on Windows.
- Prevent second keymapper process from partially connecting on Linux.
- Prevent alias substitution in strings.
Version 3.4.0 - 2023-12-31
- Not-key following key in input expression matches when key is released. e.g.
A !A >> B
- No longer implicitly waiting for key release before timeout. e.g.
A !250ms B
- Prevent input sequences without key down. e.g.
!A 500ms
- Restored unintendedly reverted support for Gnome 45.
Version 3.3.0 - 2023-12-18
- Supporting devices with event IDs higher than 31 on Linux (#89).
- Added keymapper KWin script.
- Improved coexistence with Karabiner Elements on MacOS.
- Updated Karabiner VirtualHIDDevice to version 3.1.0.
- Swapping mixed up IntlBackslash and Backquote keys on MacOS.
- Fixed context filter on MacOS.
- Fixed static build on Windows.
Version 3.2.0 - 2023-12-01
- Handling keys without scancode on Windows.
- Added keys LaunchApp2, BrowserHome, LaunchMail, LaunchMediaPlayer.
- Grabbing all devices with keys on Linux.
Version 3.1.0 - 2023-11-18
- Added character output typing.
- Allow to override Not in output with Down.
- Always hiding spawned console applications on Windows (use "start XY" to see it).
- Improved starting of terminal commands on Windows.
- Fixed executing terminal commands on wlroots based Wayland compositor.
Version 3.0.0 - 2023-10-26
- Added initial MacOS support.
- Toggling virtual keys can trigger output.
- Simultaneous output on release.
Version 2.7.2 - 2023-10-14
- Made Gnome extension compatible with Gnome 45.
Version 2.7.1 - 2023-08-17
- Properly handling inaccessible process path on Linux.
Version 2.7.0 - 2023-08-10
- Added process path context filter.
- Immediately applying context update on Linux.
Version 2.6.1 - 2023-05-07
- Preventing mouse button repeat on Windows.
- Made mouse button debouncing optional (keymapperd parameter).
Version 2.6.0 - 2023-05-05
- Allow timeouts in output expressions.
- Allow scan codes in configuration.
- Added MetaLeft/MetaRight aliases OSLeft/OSRight.
Version 2.5.0 - 2023-03-09
- Showing notifications on Linux.
- Fixed hanging keys when using Windows remote desktop.
- Removed limit of 127 keys per sequence.
- Enabled visual styles for Windows about dialog.
Version 2.4.1 - 2022-11-27
- Keys triggered by timeout no longer released immediately.
Version 2.4.0 - 2022-11-26
- Allow to add timeouts to input sequences.
- Added about dialog on Windows.
- Cancel output-on-release when focus changed on Windows.
- Fixed releasing focused window detection on Linux.
- Fixed releasing virtual device on Linux.
- Fixed displaying version.
Version 2.3.0 - 2022-10-21
- Allow the device context filter to match multiple devices.
- Grab devices regardless of bus type.
- Linking filesystem library when building with older gcc/clang
Version 2.2.0 - 2022-09-17
- Handling wheel/slider functionality of some keyboards (Linux).
- Grabbing keyboard/mouse devices despite unhandled axes (Linux).
Version 2.1.5 - 2022-07-29
- Added command line parameter to hide tray icon (Windows).
- Further improved Pause/NumLock key handling (Windows).
Version 2.1.4 - 2022-06-24
- Improved Pause/NumLock key handling (Windows).
- Showing notification when config was updated (Windows).
- Renamed Break key to Cancel.
Version 2.1.3 - 2022-06-16
- Fixed loading configuration from '$HOME/.config/' (Linux).
Version 2.1.2 - 2022-06-10
- Added Windows installer.
Version 2.1.1 - 2022-06-06
- Added tray icon for Windows client.
- Showing errors in notifications on Windows.
- Fail when config file cannot be read.
- Fixed output-on-release for terminal commands.
- Starting terminal commands in foreground.
Version 2.1.0 - 2022-05-23
- Added mouse button support.
- Added device context filter (only supported on Linux).
- Split Windows version in client/server.
- Removed Interception mode on Windows.
- Removed colored error messages.
Version 1.10.0 - 2022-05-03
- Exiting on special key sequence Shift-Escape-K.
- Any in output expressions outputs the matched input.
- Added Break key.
- Improved sending of Ctrl-key sequences on Windows.
- Restored order of logical key substitution.
Version 1.9.0 - 2022-03-13
- Added D-Bus context update support.
- Added gnome-shell extension for updating focused window on Wayland.
- Added wlroots context update support on Wayland.
Version 1.8.3 - 2022-03-07
- Better handling of unknown version by build script.
Version 1.8.2 - 2022-02-20
- Improved Not in output behavior.
- Statically linking runtime under Windows.
- Fixed right-modifier / mouse drag under Windows.
- Setting initial context on Windows.
Version 1.8.1 - 2022-01-23
- No longer grabbing combined keyboard/mouse devices.
- CMake defaults to build type "Release".
Version 1.8.0 - 2021-12-20
- Multiple contexts can be active at once.
- [default] can be used to return to the default context.
- Logical keys can be defined.
- Allow to define common modifiers for context blocks.
- Updating active context on configuration update.
- AltRight is no longer implicitly forwarded.
Version 1.7.0 - 2021-12-13
- Removed implicitly mapping of modifier keys.
- Matching begin of sequence when might-match failed.
- Completely releasing sequences and modifier groups.
- Documented importance of mapping order.
- Made Linux keyboard initialization more robust.
Version 1.6.0 - 2021-08-29
- Added terminal command output.
- Allow mapping of sequences in context blocks.
- Add option to check the validity of the config file, then exit.
- Added icon and metadata to Windows executable.
- Fixed bug with more than one virtual key in output.
- Fixed regular expressions containing [ ].
Version 1.5.0 - 2021-05-10
- Allow to define output on key release.
- Stricter validation of configuration to reduce undefined behavior.
Version 1.4.0 - 2021-03-29
- Releasing triggered input in reverse order.
- Prevent hanging key.
- Validating state on Windows after session change.
Version 1.3.0 - 2021-01-26
- Optional verbose output.
- Regular expression support for context definition.
- Updating context when window title changes.
- Applying system context independent of window context.
Version 1.2.0 - 2021-01-22
- Support of multiple keyboards under Linux.
- Improved device hot-plugging.
- Added some missing keys.
- Simplified context block definition.
- Made X11 dependency optional.
- Proper output of Any key.
- Might match when key is hold.