Branch
Hash :
d192b3b6
Author :
Date :
2025-06-19T21:57:46
keymap: Add option `unlockOnPress` for SetMods() It enables e.g. to deactivate `CapsLock` *on press* rather than on release, as in other platforms such as Windows. It fixes a [18-year old issue] inherited from the X11 ecosystem, by extending the [XKB protocol key actions]. As it is incompatible with X11, this feature is available only using the keymap text format v2. [18-year old issue]: https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/issues/74 [XKB protocol key actions]: https://www.x.org/releases/current/doc/kbproto/xkbproto.html#Key_Actions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
// Cancel CapsLock when a Shift key is pressed.
partial modifier_keys
xkb_symbols "breaks_caps" {
key <LFSH> {
type = "ALPHABETIC",
[Shift_L, Shift_L],
[
SetMods(modifiers=Shift),
SetMods(modifiers=Shift+Lock,clearLocks)
]
};
key <RTSH> {
type = "ALPHABETIC",
[Shift_R, Shift_R],
[
SetMods(modifiers=Shift),
SetMods(modifiers=Shift+Lock,clearLocks)
]
};
};
// Toggle CapsLock when pressed together with the other Shift key.
partial modifier_keys
xkb_symbols "lshift_both_capslock" {
key <LFSH> {
type[Group1]="TWO_LEVEL",
symbols[Group1] = [ Shift_L, Caps_Lock ]
};
};
// Toggle CapsLock when pressed together with the other Shift key.
partial modifier_keys
xkb_symbols "rshift_both_capslock" {
key <RTSH> {
type[Group1]="TWO_LEVEL",
symbols[Group1] = [ Shift_R, Caps_Lock ]
};
};
partial modifier_keys
xkb_symbols "both_capslock" {
include "shift(lshift_both_capslock)"
include "shift(rshift_both_capslock)"
};
// Set CapsLock when pressed with the other Shift key, release it when pressed alone.
partial modifier_keys
xkb_symbols "lshift_both_capslock_cancel" {
key <LFSH> {
type[Group1]="ALPHABETIC",
symbols[Group1] = [ Shift_L, Caps_Lock ]
};
};
// Set CapsLock when pressed with the other Shift key, release it when pressed alone.
partial modifier_keys
xkb_symbols "rshift_both_capslock_cancel" {
key <RTSH> {
type[Group1]="ALPHABETIC",
symbols[Group1] = [ Shift_R, Caps_Lock ]
};
};
partial modifier_keys
xkb_symbols "both_capslock_cancel" {
include "shift(lshift_both_capslock_cancel)"
include "shift(rshift_both_capslock_cancel)"
};
// Toggle ShiftLock when pressed together with the other Shift key.
partial modifier_keys
xkb_symbols "lshift_both_shiftlock" {
key <LFSH> {
type[Group1]="TWO_LEVEL",
symbols[Group1] = [ Shift_L, Shift_Lock ]
};
};
// Toggle ShiftLock when pressed together with the other Shift key.
partial modifier_keys
xkb_symbols "rshift_both_shiftlock" {
key <RTSH> {
type[Group1]="TWO_LEVEL",
symbols[Group1] = [ Shift_R, Shift_Lock ]
};
};
partial modifier_keys
xkb_symbols "both_shiftlock" {
include "shift(lshift_both_shiftlock)"
include "shift(rshift_both_shiftlock)"
};