Переназначение клавиатуры с большим количеством модификаторов

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

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

13.10.2009 00:41:02
Этот вопрос в основном о компиляции раскладки клавиатуры довольно необычным способом, который требует низкоуровневых хаков. Я думал о том, чтобы поставить его на суперпользователя, но он не получит никаких ответов. Это ближе к программированию (да - это в основном программирование xkb), чем просто настройка ваших настроек (на чем специализируется суперпользователь).
viraptor 13.10.2009 15:09:30
1 ОТВЕТ
РЕШЕНИЕ

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

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

код ключа 53 = x X Greek_xi Greek_XI умножить U2297 U24E7 U24CD

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


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

    ключ <SPCE> {
// Уровень I II III IV
        [пробел, пробел, U2395, U2592], // Группа 1
        [U2423, emspace, U2420, hairspace] // Группа 2
    };

    ключ <RALT> {
        [Mode_switch, Mode_switch]
    };

    ключ <RCTL> {
        [ISO_Level3_Shift, ISO_Level3_Shift]
    };

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

В приведенном выше примере сопоставляются семь символов с пробелом и различные клавиши Shift, такие что:

space⟨⟩ U + 0020 ПРОСТРАНСТВО
Shift+space⟨⟩ U + 0020 ПРОСТРАНСТВО
R. Alt+space⟨␣⟩ U + 2423 ОТКРЫТЫЙ BOX
R. Alt+Shift+space⟨⟩ U + 2003 EM ПРОСТРАНСТВО
R. Ctl+space⟨⎕⟩ U + 2395 APL ФУНКЦИОНАЛЬНЫЕ SYMBOL QUAD
R. Ctl+Shift+space⟨▒⟩ U + 2592 MEDIUM ТЕНЬ
R. Alt+R. Ctl.+space⟨␠⟩ U + 2420 СИМВОЛ ДЛЯ ПРОСТРАНСТВА⟩⟩
R. Alt+R. Ctl.+Shift+spaceU + 200A ПРОСТРАНСТВО ВОЛОС

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

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


¹ Оказывается, что xmodmap (1) содержит ошибки и устарел.

11
5.11.2018 09:57:54
Просто интересно - есть ли способ сделать какой-то ключ модификатором таким образом? Так что же делает ISO_Next_Group на прессу и ISO_Prev_Group на релиз?
viraptor 14.10.2009 23:48:35