2009-10-13 3 views
7

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

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

+0

Этот вопрос в основном касается компиляции ключевой карты довольно необычным способом, который требует хакеров низкого уровня. Я думал о том, чтобы поместить его в суперпользователя, но он не получит никаких ответов. Это ближе к программированию (да - это в основном программирование xkb), чем просто настройка ваших настроек (что специализируется суперпользователь). – viraptor

ответ

11

Для каждого определения кода ключа вы можете иметь до восьми клавиш. Они организованы попарно в четыре группы. Существует семейство keysyms 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» на типы из «х» , После нажатия клавиши ISO_Next_Group я получаю «ξ». Нажав снова, я получаю «×». Повторное нажатие «ⓧ». Наконец, нажатие на него в четвертый раз возвращает все к нормальной жизни.


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

 
    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.

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

пространство ⟨⟩ U + 0020 КОСМИЧЕСКИЙ
Shift + пространство ⟨⟩ U + 0020 КОСМИЧЕСКИЙ
R. Alt + пробел ⟨␣⟩ U + 2423 ОТКРЫТЫЙ BOX
R. Alt + Shift + пробел ⟨⟩ U + 2003 шпации
Р. Ctl + пробела ⟨⎕⟩ U + 2395 АПЗ функционального символ КВАД
Р. Ctl + Shift + пробел ⟨▒⟩ U + 2592
среднего оттенка Р. 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) глючит и устаревшим.

+0

Просто интересно - есть ли способ сделать какой-то ключ модификатором таким образом? Так что ISO_Next_Group нажимает и ISO_Prev_Group на выпуск? – viraptor

Смежные вопросы