«1. Так что же делает модификатор 5-го уровня? »
Выбирает пятый уровень. Модификатор 2-го уровня (просто обычная смена) выбирает второй уровень, а 3-й уровень выбирает третий уровень.
Причина, по которой модификатор 5-го уровня выбирает пятый уровень вместо четвертого уровня (сразу после модификатора 3-го уровня), заключается в том, что эти три модификатора можно комбинировать различными способами для выбора восьми различных уровней (это включает в себя не использование каких-либо модификаторов, который просто нажимает клавишу без таких модификаторов). Существует восемь комбинаций, так как 2 combinations 3 = 8. Для первых двух модификаторов существует четыре комбинации:
- Без модификаторов (уровень 1)
- Модификатор 2-го уровня, он же сдвиг (уровень 2)
- Модификатор 3-го уровня (уровень 3)
- 2-й + 3-й модификатор (уровень 4)
Добавление третьего модификатора (5-й уровень) добавляет еще четыре уровня.
«2. Как мне настроить его так, чтобы я мог получить 5 или 6 разных символов из одной клавиши (например, измененной Shift, Alt Grи т.д. Right
Ctrl)? »
Прежде всего вам нужен макет, который использует пять или более символов на клавишу. Вы можете выбрать существующий макет, но если вы просто хотите добавить больше уровней к макету, который вы используете в данный момент, это может оказаться неоптимальным. Например, есть раскладка клавиатуры Neo († 1), но она «оптимизирована для немецкого языка», поэтому не подходит для большинства носителей английского языка.
Тем не менее, было бы поучительно посмотреть, какие ключи выбрал Нео для модификатора 5-го уровня.
Нео, по-видимому, называет модификатор 5 уровня для «Mod4». Так что, как вы можете видеть, он использует клавишу справа от левой клавиши Shift ( LSGT
) и правую клавишу Alt / AltGr
клавишу. Это на европейской клавиатуре (105 клавиш), которая по сравнению с американской клавиатурой (104 клавиши) имеет узкое левое смещение и высокую и тонкую клавишу возврата. Для раскладки клавиатуры, основанной на клавиатуре США, может потребоваться - или предпочтительнее - выбрать другие клавиши.
Выбор 5 уровня клавиши-модификатора
В ответе sup он решает использовать Xmodmap. В настоящее время такие инструменты, как Setxkbmap, рекомендуются поверх Xmodmap. Xkb поставляется с множеством предопределенных опций для таких вещей, как выбор модификатора уровня 5. Если вы обратитесь к
man xkeyboard-config и выполните поиск, lv5
вы найдете следующие опции:
┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option │ Description │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│ │ lock when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
└──────────────────────┴───────────────────────────────────────────────────┘
Таким образом, задокументированные параметры - это LSGT
ключ, правая клавиша Alt, правая клавиша Windows и левая клавиша Windows. Как мы уже видели, Neo использует первые два варианта.
Скажем, вы хотите использовать lv5:ralt_switch_lock
опцию с некоторым макетом. Эта команда устанавливает us
макет с помощью этой клавиши-модификатора уровня 5:
setxkbmap -option "lv5:ralt_switch_lock" us
Так что для любого из параметров, которые описаны в документе man xkeyboard-config
, используйте это в качестве аргумента -option
при использовании Setxkbmap.
Если этих опций недостаточно, и вы хотите определить другой ключ в качестве модификатора уровня 5, полезно взглянуть на объявления этих опций. Кажется, они в
/usr/share/X11/xkb/symbols/level5
. Объявление для
lv5:ralt_switch_lock
выглядит так:
partial modifier_keys
xkb_symbols "ralt_switch_lock" {
include "level5(lock)"
key <RALT> {
type[Group1] = "EIGHT_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
};
};
В правой части symbols[Group1]
указывается, какой ключ или символ должен генерировать каждый уровень ключа. При этом используются все восемь возможных уровней, поскольку предполагается блокировать модификатор уровня 5 при нажатии вместе с другой клавишей Shift уровня 5. Таким образом, уровни 5–8 испускаются,
ISO_Level5_Lock
поскольку доступ ко всем этим уровням осуществляется путем удержания сдвига уровня 5 и некоторой комбинации других клавиш Shift (ни одной из них). Если вам нужно только поведение сдвига, а не поведение блокировки, если нажата две, вы можете сделать более простое объявление (из того же файла):
// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
key <RALT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift ]
};
include "level5(modifier_mapping)"
};
Добавление дополнительных уровней в макет
Макеты Xkb довольно модульные. Вы можете включить существующие макеты и изменить их. Таким образом, мы можем выбрать существующий макет с менее чем 5 уровнями и добавить к нему несколько уровней.
Вы можете создавать новые макеты, копируя файл с вашими макетами
/usr/share/X11/xkb/symbols/
, или где бы ваши инструменты Xkb не искали макеты. Но это требует привилегий sudo, поэтому это не лучшее решение. В качестве альтернативы вы можете скопировать структуру каталогов xkb/
и поместить ваши макеты в соответствующий каталог xkb/
, а именно
symbols/
. Скажем, вы сделали файл xkb-tree/symbols/my-layouts
. Чтобы использовать макеты, определенные в этом файле, вы можете использовать -print
опцию setxkbmap
и затем направить вывод xkbcomp
. Этот скрипт-обертка принимает макеты в качестве входных данных:
#!/bin/sh
# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
-print |
xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"
Что касается файла с макетом, скажем, мы хотим расширить макет «США международный», который использует четыре уровня. Прежде всего, мы настраиваем клавиши Shift уровня 3 и уровня 5 так же, как Neo:
partial alphanumeric_keys
xkb_symbols "mine" {
// US international
include "us(intl)"
// Set up level 3 modifiers.
include "level3(modifier_mapping)"
include "level3(bksl_switch)"
include "level3(caps_switch)"
// Set up level 5 modifiers.
include "level5(modifier_mapping)"
include "level5(lsgt_switch)"
include "level5(ralt_switch)"
};
Теперь мы хотим добавить несколько дополнительных символов. Давайте просто использовать первые четыре ключа раскладок Qwerty в качестве примера. Эти ключи Q
к R
, которые соответствуют <AD01>
в <AD04>
. Для начала нам нужно сделать ключи способными использовать до восьми уровней:
key.type[Group1] = "EIGHT_LEVEL";
Для первых четырех уровней, чтобы не переопределять их, мы сопоставляем их с NoSymbol
. Затем мы добавляем два уровня. На уровне 5 мы добавляем стрелки ←↓↑→
(† 2). На уровне 6 мы добавляем клавиши со стрелками. Наш макет выглядит примерно так:
partial alphanumeric_keys
xkb_symbols "mine" {
// US international
include "us(intl)"
// Set up level 3 modifiers.
include "level3(modifier_mapping)"
include "level3(bksl_switch)"
include "level3(caps_switch)"
// Set up level 5 modifiers.
include "level5(modifier_mapping)"
include "level5(lsgt_switch)"
include "level5(ralt_switch)"
// Make the following keys capable of using eight levels.
key.type[Group1] = "EIGHT_LEVEL";
key <AD01> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
leftarrow, Left
] };
key <AD02> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
downarrow, Down
] };
key <AD03> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
uparrow, Up
] };
key <AD04> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
rightarrow, Right
] };
};
Чтобы использовать его, мы можем использовать скрипт-обертку, который мы сделали:
./setxkbmap-wrapper "my-layouts(mine)"
† 1: Нео находится de(neo)
в Xkb; setxkbmap "de(neo)"
,
† 2: Чтобы найти символические имена, которые использует Xkb, найдите файл с именем keysymdef.h
. Он должен быть в каталоге с именем X11/
. Вы также можете использовать имена Unicode, например, U2192
для U + 2192.