Использование смещенных функциональных клавиш в раскладке клавиатуры XKB

Я работаю над кхмерской раскладкой клавиатуры и столкнулся с проблемой на последнем этапе проекта.

В кхмерском языке 33 согласных, 24 гласных диакритических знака и еще 14 независимых гласных. Кроме того, я включил соответствующий символ(ы) международного фонетического алфавита каждого символа в свой макет на уровнях ALT и SHIFT-ALT, так что мне очень быстро не хватает места.

Чтобы облегчить это, я планировал сопоставить 24 диакритических знака гласных с F1 - F12 и SHIFT F1 - F12 (с соответствующими символами IPA на уровнях ALT и SHIFT/ALT), но SHIFT + FN, ALT + FN и SHIFT/ALT + Комбинации FN не регистрируются. Я пробовал комбинации в разных текстовых редакторах, браузерах и терминале, но ничего не работает. Похоже, это системная проблема.

Я использую Ubuntu 10.04.

Вот раздел в моем макете, который относится к клавишам FN:

key <FK01> { [ 0x10017b6,       0x10017c2,      voidsymbol, voidsymbol  ] };
key <FK02> { [ 0x10017b7,       0x10017c3,      voidsymbol, voidsymbol  ] };
key <FK03> { [ 0x10017b8,       0x10017c4,      voidsymbol, voidsymbol  ] };
key <FK04> { [ 0x10017b9,       0x10017c5,      voidsymbol, voidsymbol  ] };
key <FK05> { [ 0x10017ba,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK06> { [ 0x10017bb,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK07> { [ 0x10017bc,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK08> { [ 0x10017bd,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK09> { [ 0x10017be,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK10> { [ 0x10017bf,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK11> { [ 0x10017c0,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK12> { [ 0x10017c1,       voidsymbol,     voidsymbol, voidsymbol  ] };

Как вы можете видеть, я пока только заполнил SHIFT F1 - F4, я сделаю все остальное, когда или если эти клавиши заработают.

Надеюсь, некоторые из вас могут указать мне правильное направление.


person Matt Fisher    schedule 18.10.2013    source источник


Ответы (2)


Я не знаю, почему комбинации не регистрируются, но в качестве альтернативного решения подумайте, возможно, об использовании большего количества уровней для каждой клавиши, например, с использованием level5 (путем включения одного из определений символов для сопоставления некоторой клавиши с модификатором level5) и определения сопоставление клавиш с использованием восьмиуровневого типа, например EIGHT_LEVEL или EIGHT_LEVEL_ALPHABETIC.

person Tom    schedule 07.01.2016

Я предполагаю, что резервный «тип» ваших клавиш FN по умолчанию не включает достаточное количество клавиш. Например, если у вас есть

key <FK01> { type = "TWO_LEVEL", [FirstKey,SecondKey,ThirdKey,...]}

тогда могут быть сгенерированы только FirstKey и SecondKey. Если у тебя есть

key <FK01> { type = "CTRL+ALT", [FirstKey,SecondKey,ThirdKey,...]}

затем должны быть распознаны уровни alt, ctrl и ctrl+alt, что даст вам 5 уровней, 4 из которых вы, возможно, захотите изменить (вероятно, вы не захотите менять уровень ctrl). Имейте в виду, что вы, вероятно, захотите использовать CTRL+ALT+FN для переключения с X на терминал в случае чрезвычайной ситуации или, по крайней мере, чтобы какая-то клавиша была привязана к XF86Switch_VT_1 где-то в вашем макете.

Вы также можете различать Alt и AltGr, последний называется ISO_Level3_Shift в xkb.

Если вы хотите создать и использовать кнопку ISO_Level5_Switch где-нибудь на клавиатуре, вы можете использовать тип «EIGHT_LEVEL» или аналогичный для распознавания всех комбинаций (без модификатора), level3 и level5, всего 8 уровней.

(У меня Alt_L привязан к моей левой кнопке Alt, ISO_Level3_Shift привязан к моей правой кнопке Alt, а ISO_Level5_Shift привязан к моей правой кнопке «окна»)

Ваша карта клавиатуры, вероятно, должна будет импортировать некоторые типы ключей из других источников. В разделе xkb_types вашего файла .xkb добавьте строку

augment "level5" 

чтобы включить "LEVEL_EIGHT" и другие подобные типы в макет.

Файлы в /usr/share/X11/xkb/types/ должны показать вам, какие типы доступны в вашей системе, и какой файл вам нужно добавить в ваш файл .xkb со строкой дополнения, чтобы использовать тип. (Они могут находиться в другом каталоге в вашей системе, так как я использую Gentoo; введите locate level5 в терминале, чтобы узнать, где находится этот каталог.) Если вы чувствуете необходимость, вы также можете создать свой собственный тип непосредственно в разделе xkb_types. вашего файла .xkb после строк дополнения. Просмотрите файлы в /usr/share/X11/xkb/types/, чтобы увидеть синтаксис определения типа.

Вы также захотите добавить строку в свой раздел xkb_compatibility, а не только в раздел xkb_types; xkb_types предоставляет типы, xkb_compatibility определяет поведение ключа-модификатора, поэтому, хотя augment "level5" в xkb_types даст вам доступ к типам, таким как «EIGHT_LEVEL», augment "level5" в xkb_compatibility сделает ключ, привязанный к ISO_Level5_Shift, фактически действующим как модификатор.

Просто чтобы дать вам представление, мой собственный раздел xkb_compatibility выглядит так:

 xkb_compatibility "complete" {

     // "pc" would only set Alt, need "pc98" for NumLock
     include  "pc98" // Numlock
     augment "misc" // Alt,Meta,Super,Hyper ... 
     augment "ledscroll(group_lock)" // Set scroll lock on group switch
     augment "xfree86" // Switch out to terminal
     augment "caps" // Simple caps thing
     augment "iso9995" // level3,groups
     augment "level5" // level5
 };

Я не уверен, все ли файлы .xkb включают эти разделы или это только мой. IIRC, часто есть способ с графическим интерфейсом включить level3, level5 и тому подобное, когда вы устанавливаете свой макет, а не в самом файле макета, если вам это больше нравится.

Если вы хотите углубиться, я могу порекомендовать что-то вроде https://www.charvolant.org/doug/xkb/

person stobix    schedule 01.06.2017