@@ -44,6 +44,11 @@ xkb_symbols "backspace" {
4444 key <CAPS> { [ BackSpace ], type[group1] = "ONE_LEVEL" };
4545};
4646
47+ hidden partial modifier_keys
48+ xkb_symbols "return" {
49+ key <CAPS> { [ Return ], type[group1] = "ONE_LEVEL" };
50+ };
51+
4752hidden partial modifier_keys
4853xkb_symbols "super" {
4954 key <CAPS> { [ Super_L ], type[group1] = "ONE_LEVEL" };
@@ -53,7 +58,8 @@ xkb_symbols "super" {
5358hidden partial modifier_keys
5459xkb_symbols "hyper" {
5560 key <CAPS> { [ Hyper_L ], type[group1] = "ONE_LEVEL" };
56- modifier_map Mod4 { <CAPS> };
61+ modifier_map None { <CAPS> };
62+ include "hyper(mod3)"
5763};
5864
5965hidden partial modifier_keys
@@ -66,6 +72,17 @@ xkb_symbols "numlock" {
6672 key <CAPS> { [ Num_Lock ], type[group1] = "ONE_LEVEL" };
6773};
6874
75+ hidden partial modifier_keys
76+ xkb_symbols "ctrl_shifted_capslock" {
77+ key <CAPS> {
78+ type[Group1] = "TWO_LEVEL",
79+ symbols[Group1] = [ Control_L, Caps_Lock ],
80+ // Explicit actions are preferred over modMap None/Control { Caps_Lock }
81+ // because they have no side effect
82+ actions[Group1] = [ SetMods(modifiers=Control), LockMods(modifiers=Lock) ]
83+ };
84+ };
85+
6986// This changes the <CAPS> key to become a Control modifier,
7087// but it will still produce the Caps_Lock keysym.
7188hidden partial modifier_keys
@@ -83,3 +100,52 @@ hidden partial modifier_keys
83100xkb_symbols "none" {
84101 key <CAPS> { [ VoidSymbol ], type[group1] = "ONE_LEVEL" };
85102};
103+
104+ // For layouts having digits on the 2nd level on the digits row and key type
105+ // FOUR_LEVEL (e.g. fr(basic) and be(basic)), this makes CapsLock give the digits
106+ // by changing their key type to FOUR_LEVEL_SEMIALPHABETIC. Note that this has the
107+ // drawback that the uppercases À, È, É and Ç are no longer available, as those
108+ // layouts rely on internal capitalization rules for those letters.
109+ hidden partial alphanumeric_keys
110+ xkb_symbols "digits_row" {
111+ key.type[group1] = "FOUR_LEVEL_SEMIALPHABETIC";
112+
113+ // No symbol defined: we just want to change the key type
114+ key <AE01> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
115+ key <AE02> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
116+ key <AE03> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
117+ key <AE04> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
118+ key <AE05> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
119+ key <AE06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
120+ key <AE07> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
121+ key <AE08> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
122+ key <AE09> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
123+ key <AE10> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
124+ };
125+
126+ // The Shift + Caps Lock combination inverts the first two levels only.
127+ // Originally designed for layouts with digits on the second level of the
128+ // digits row (e.g. Azerty layouts).
129+ // This allows users to have direct access to digits while keeping
130+ // usual capitalization via Caps Lock.
131+ hidden partial alphanumeric_keys
132+ xkb_symbols "digits_row_independent_lock" {
133+ key <CAPS> {
134+ type[Group1] = "TWO_LEVEL",
135+ symbols[Group1] = [ NoSymbol, ISO_Level5_Lock ]
136+ };
137+
138+ key.type[group1] = "FOUR_LEVEL_LOCKABLE_LEVEL2";
139+
140+ // No symbol defined: we just want to change the key type
141+ key <AE01> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
142+ key <AE02> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
143+ key <AE03> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
144+ key <AE04> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
145+ key <AE05> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
146+ key <AE06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
147+ key <AE07> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
148+ key <AE08> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
149+ key <AE09> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
150+ key <AE10> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
151+ };
0 commit comments