Branch
Hash :
69c3d257
Author :
Date :
2025-06-17T16:43:05
keymap: Add parameter `latchOnPress` for LatchMods() Some keyboard layouts use `ISO_Level3_Latch` or `ISO_Level5_Latch` to define “built-in” dead keys: - they do not rely on the installation of custom Compose file; - they do not clash with other layouts. However, layout projects usually want the exact same behavior on all OS, but the XKB latch behavior (often misunderstood) also acts as a *set* modifier, which is not expected. The usual behavior of a dead key on Linux, macOS and Windows is: - latch on press; - deactivate as soon as another (non-modifier) key is pressed. Added the parameter `latchOnPress` to `LatchMods()` to enable the aforementioned behavior. As it is incompatible with X11, this feature is available only using the keymap text format v2. [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
partial xkb_compatibility "latchOnPress" {
virtual_modifiers LevelThree;
interpret.repeat= False;
setMods.clearLocks= True;
latchMods.clearLocks= True;
latchMods.latchToLock= True;
interpret ISO_Level3_Latch+Any {
useModMapMods= level1;
virtualModifier= LevelThree;
action= LatchMods(modifiers=LevelThree, latchOnPress);
};
interpret ISO_Level3_Latch {
action= LatchMods(modifiers=LevelThree, latchOnPress);
};
};
partial xkb_compatibility "latchOnRelease" {
virtual_modifiers LevelThree;
interpret.repeat= False;
setMods.clearLocks= True;
latchMods.clearLocks= True;
latchMods.latchToLock= True;
interpret ISO_Level3_Latch+Any {
useModMapMods= level1;
virtualModifier= LevelThree;
action= LatchMods(modifiers=LevelThree, latchOnPress=false);
};
interpret ISO_Level3_Latch {
action= LatchMods(modifiers=LevelThree, latchOnPress=false);
};
};