You can use preserve
for that: add to you type-definition (e.g. THREE_LEVEL
) the line
preserve[LevelThree+Shift] = Shift;
This tells xkb to preserve the shift modifier when figuring out the appropriate level from your modifier combination in the case of LevelThree + Shift
. The shift modifier is passed on for use by the toolkit or the application (see also here: using preserve with types).
Note that this has impact for example on how the application interprets keystroke combinations: if you had defined the above preserve and
key <AC08> { type="THREE_LEVEL", [ k, K, kappa ] };
and you'd press Ctrl + Shift + LevelThree + <AC08>
the application would read it as a key combo Ctrl + Shift + kappa
(instead of usually Ctrl + kappa
) because the shift modifier gets preserved and is passed on to the application.