For some reason I'm looking into this xkb symbol file, and I'm seeing some group of keys designated as FOUR_LEVEL_SEMIALPHABETIC.

Now, the definition of it in types/caps is:

    modifiers = Shift+Lock+LevelThree;
    map[None] = Level1;
    map[Shift] = Level2;
    preserve[Lock] = Lock;
    map[LevelThree] = Level3;
    map[Shift+LevelThree] = Level4;
    map[Lock+LevelThree] =  Level3;
    map[Lock+Shift+LevelThree] = Level4;
    preserve[Lock+LevelThree] = Lock;
    preserve[Lock+Shift+LevelThree] = Lock;
    level_name[Level1] = "Base";
    level_name[Level2] = "Shift";
    level_name[Level3] = "Alt Base";
    level_name[Level4] = "Shift Alt";


Lock means Caps Lock, right? Ok, fine. But What's with this LevelThree business? From the text I thought maybe it's the Alt key, but that doesn't seem to work, i.e. using one of these supposed layouts (il), I don't get Level3 or Level4 characters typed using the Alt key - and I tried all combinations - with/out Shift, Caps Lock on/off.

What am I doing wrong?


What's with this LevelThree business?

In the model expounded by ISO/IEC 9995, which is the international standard (set) that covers computer keyboards, keys can have one or more levels. What you may think of as "modifier keys" select amongst the available levels, sometimes in a complex fashion.

(Think of the operation of a mechanical typewriter, where the shift key actually moved part of the mechanism to a different level, and where the shift key often mechanically unlocked a "shift lock". Then mix in the ideas of other kinds of locks, such as ones that only apply to subsets of the keyboard such as the main block or the calculator pad.)

Sometimes the levels are what you see physically engraved upon the keys, sometimes (especially in the case of U.S. and European engravings and alphabetic keys) one or more of the levels are implied but not explicitly engraved.

Level 1 is unshifted; level 2 is the result of a ⇧ Shift modifier, a shift latch, a ⇫ Shift Lock, a Num Lock, or a ⇬ Caps Lock; and level 3 is the result of a "level three modifier" of some kind.

As you can see from this configuration file, a "level 4" convention exists (an extension to ISO/IEC 9995 proper) that is the result of applying both level 2 and level 3 shifts at the same time.

(This convention presupposes that this combination is even available in the first place. In some keyboard layouts, there is no ⇨ Group 2 key, and the keys that would otherwise select "level 4" instead select the second group, which is an entire alternative layout complete with its own set of 3 shift levels. On actual keytops, group 2 is a second column of one to three engraved symbols on the right. A lot of complexity in some systems results from trying to pretend that group 2 does not exist, whereas level 4 does.)

A level three modifier is generally the ⇮ AltGr key, to the right of the spacebar. On some keyboards the key that generates the relevant HID code, down the wire from the keyboard to the main unit, is labelled ⌥ Option and its physical position (still on the right) is slightly different. Software sees it as the same key, whichever the engraving and physical position. Do not, by the way, confuse it with the similar key that is to the left of the spacebar. That is a different key.

Not all software keyboard layouts make this key into a level modifier, however. What keys are modifier keys is (with one exception) entirely determined by the software keyboard layout. In some software keyboard layouts the key in that position is treated as another ⎇ Alt. If this is the case, one has no way to type a level 3 shift, absent using another keyboard layout or patching one's current keyboard layout so that some key or combination of keys produces a level 3 shift.

In a SI 1452 layout, ⇮ AltGr is indeed the level 3 shift, and with it you should be able to type all of the Niqqud. I suspect that you have conflated ⎇ Alt and ⇮ AltGr.

Further reading


The LevelThree modifier is essentially another Shift. It's used on certain keyboard layouts. For instance, when I'm typing with a Swiss keyboard layout, I can use the AltGr key to get access to some symbols. AltGr+2 produces @, for instance. It's mostly used because Swiss keyboards need German (ä, ö, ü etc.), as well as French symbols (é, è, ê etc.), so there are simply more characters to type.

If it isn't mapped in your keyboard layout, you could map it yourself by creating a new keytype, see this answer that covers how to do it: how to bind AltGr to <Ctrl> + <Alt>

Quick explanation on why it's calledFOUR_LEVEL_SEMIALPHABETIC: ALPHABETIC key types use Shift and CapsLock modifiers. Shift and CapsLock are not identical in ALPHABETIC types (as opposed to TWO_LEVEL types). E.g. on a Swiss layout, Shift+a produces A and CapsLock and a produces A, so it's a key using TWO_LEVEL. However, ä, which is its own key on a Swiss keyboard, turns into à when used with Shift, but into the capital Ä when used with CapsLock.

FOUR_LEVEL just means it uses even more levels. Shift+LevelThree activates the fourth level, as you can see in your type definition. I'm not quite sure why it's called SEMIALPHABETIC, but it's probably got something to do with how exactly the different modifiers cancle out. The documentation here says that FOUR_LEVEL_ALPHABETIC types should use Lock+Shift+LevelThree for a third level symbol, but in your example it produces a fourth level. In the end the naming is fairly arbitrary anyway.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.