Что делает ключевое слово preserve в файлах конфигурации xkb?

Что делает ключевое слово preserve в файлах конфигурации xkb?

Я хочу узнать, что делает ключевое слово preserve в разделе xkb_types пользовательской раскладки клавиатуры xkb.

Вот пример из существующего файла конфигурации:

type "FOUR_LEVEL_SEMIALPHABETIC" {
    modifiers= Shift+Lock+LevelThree;
    map[Shift]= Level2;
    map[Lock]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Lock+LevelThree]= Level3;
    preserve[Lock+LevelThree]= Lock;
    map[Shift+Lock+LevelThree]= Level4;
    preserve[Shift+Lock+LevelThree]= Lock;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
};

Меня интересуют вот эти две строки:

    preserve[Lock+LevelThree]= Lock;
    preserve[Shift+Lock+LevelThree]= Lock;

К сожалению, ни Archwiki, где есть очень хорошее руководство по настройке xkb, ни официальный сайт xkb (на котором в целом не так много информации) не содержат никакой информации по этому поводу.

решение1

XFree86 документирует это вКак еще больше улучшить конфигурацию XKB; Определение новых макетов. Копирование соответствующего фрагмента для удобства читателя,

Обычно все модификаторы, представленные в modifiers=<list of modifiers>списке, используются для расчета уровня сдвига, а затем отбрасываются. Иногда это нежелательно. Если вы хотите использовать модификатор для расчета уровня сдвига, но не хотите отбрасывать его, вы можете перечислить в preserve[<combination of modifiers>]=<list of modifiers>. Это означает, что для данной комбинации все перечисленные модификаторы будут сохранены. Если модификатор Lock сохранен, то полученный символ передается во внутреннюю процедуру капитализации независимо от того, использовался ли он для расчета уровня сдвига или нет.

Связанный контент