Перераспределение клавиатуры с большим количеством модификаторов - PullRequest
7 голосов
/ 13 октября 2009

Я ищу способ добавить еще одну «раскладку» к моей клавиатуре. Я уже использую макет, который использует altgr для букв местного алфавита. Я хотел бы добавить зеркальную правую клавиатуру, которая активируется с помощью caps-lock (описана в http://xkcd.com/mirrorboard.xkb)

К сожалению ISO_LEVEL3_SHIFT уже занято местным алфавитом. (AFAIK) Если я использую mode_shift для смены группы, я больше не могу использовать более 2 уровней в группе. Есть ли способ создать разные группы для altgr и mode_shift?

1 Ответ

11 голосов
/ 14 октября 2009

Для каждого определения кода ключа вы можете иметь до восьми символов ключа. Они организованы попарно в четыре группы. Существует семейство клавиатурных символов ISO_Next_Group, ISO_Prev_Group, ISO_First_Group и ISO_Last_Group, которые при нажатии циклически повторяют вывод клавиатуры, нажимая клавишу среди групп клавиатуры. Эти ключи - то, как вы достигаете нескольких раскладок.

В качестве примера, если предположить, что ISO_Next_Group привязан к коду ключа и назначен модификатору, то для этого определения:

keycode 53 = x X   Greek_xi Greek_XI   multiply U2297   U24E7 U24CD

нажатие на клавиатуре с надписью «X» набирает «x». После нажатия клавиши ISO_Next_Group я получаю «ξ». При повторном нажатии я получаю «×». Нажав еще раз, «ⓧ». Наконец, нажатие на него в четвертый раз приводит все в норму.


Потратив несколько дней (потому что Xkb¹ имеет ужасную документацию; наконец-то нашел справочник здесь ), вы можете создать файл определения символа со следующими записями:

    key <SPCE> {
// Level  I      II       III    IV
        [ space, space,   U2395, U2592 ],    // Group 1
        [ U2423, emspace, U2420, hairspace ] // Group 2
    };

    key <RALT> {
        [ Mode_switch, Mode_switch ]
    };

    key <RCTL> {
        [ ISO_Level3_Shift, ISO_Level3_Shift ]
    };

Скобки заключают в одну группу. Обычно первая группа активна. Группу можно временно увеличить на единицу с помощью ISO_Group_Shift , a.k.a. Mode_switch . Внутри группы испускаемые символы определяются в возрастающих уровнях. Уровень I с голым нажатием клавиши. Shift добавляет единицу к текущему уровню. ISO_Level3_Shift устанавливает уровень III.

Приведенный выше пример отображает семь символов на пробел и различные клавиши Shift, такие как:

пробел ⟩⟩ U + 0020 ПРОБЕЛ
Shift + пробел ⟨⟩ U + 0020 ПРОБЕЛ
R. Alt + пробел ⟨␣⟩ U + 2423 ОТКРЫТАЯ КОРОБКА
R. Alt + Shift + пробел ⟩⟩ U + 2003 EM SPACE
R. Ctl + пробел ⟨⎕⟩ U + 2395 APL ФУНКЦИОНАЛЬНЫЙ СИМВОЛ QUAD
R. Ctl + Shift + пробел ⟨▒⟩ U + 2592 СРЕДНЯЯ ТЕНЬ
R. Alt + R. Ctl. + Пробел ⟨␠⟩ U + 2420 СИМВОЛ ДЛЯ ПРОСТРАНСТВА
R. Alt + R. Ctl. + Shift + пробел ⟩⟩ U + 200A ПРОСТРАНСТВО ВОЛОС

Также есть ключ ISO_Level5_Shift для уровня V. Таким образом, вы можете иметь как минимум шесть символов для одной группы. С помощью клавиши переключения режимов это означает, что вы можете настроить клавиатуру так, чтобы она набирала примерно 1200 различных символов, но при этом удерживание такого количества модификаторов, вероятно, приведет к отключению нескольких клавиш.

P.S. Имена всех названных символов хранятся в /usr/include/X11/keysymdef.h.


¹ Оказывается, что xmodmap (1) содержит ошибки и устарел.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...