«1. То що робить модифікатор 5-го рівня? "
Він обирає п’ятий рівень. Модифікатор 2-го рівня (просто регулярна зміна) вибирає другий рівень, а 3-й рівень вибирає третій рівень.
Причиною того, що модифікатор 5-го рівня вибирає п'ятий рівень замість четвертого рівня (відразу після модифікатора 3-го рівня), полягає в тому, що ці три модифікатори можна комбінувати різними способами, щоб вибрати вісім різних рівнів (це включає не використання жодного з модифікаторів, яка просто натискає клавішу без таких модифікаторів). З восьми ↑ 3 = 8. існує вісім комбінацій. Для перших двох модифікаторів є чотири комбінації:
- Немає модифікаторів (рівень 1)
- Модифікатор другого рівня, відомий також як зсув (рівень 2)
- Модифікатор 3-го рівня (рівень 3)
- 2-й + 3-й модифікатор (рівень 4)
Додавання третього модифікатора (5-го рівня) додає ще чотири рівні.
«2. Як це налаштувати так, щоб я міг отримати з однієї клавіші 5 або шість різних символів (змінено Shift Alt GrтаRight
Ctrl наприклад)? "
Перш за все вам потрібен макет, в якому використовується п'ять і більше символів на ключ. Ви можете вибрати існуючий макет, але якщо ви просто хочете додати більше рівнів до макета, який ви зараз використовуєте, це може бути не оптимальним. Наприклад, є Нео розкладка клавіатури († 1), але вона "оптимізована для німецької мови", так що це не чудово для більшості носіїв англійської мови.
Але все-таки може бути корисним подивитися, які клавіші вибрав Neo для модифікатора рівня 5.
Нео, мабуть, називає модифікатор рівня 5 для "Mod4". Як ви бачите, він використовує ключ праворуч від лівої клавіші зсуву ( 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 при натисканні разом із іншою клавішею зсуву рівня 5. Таким чином, рівні 5–8 випромінюються,
ISO_Level5_Lock
оскільки всі ці рівні доступні, утримуючи зсув рівня 5 та деяку комбінацію інших клавіш зсуву (жодної для всіх). Якщо ви хочете лише поведінку зсуву, а не поведінку блокування, якщо два натиснуті, ви можете зробити більш просту заяву (з того ж файлу):
// 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 шукають макети. Але для цього потрібна привілей судо, тому це не найкраще рішення. Крім того, ви можете скопіювати структуру каталогів 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"
Що стосується файлу з макетом, скажімо, що ми хочемо розширити "американський міжнародний" макет, який використовує чотири рівні. Перш за все, ми встановили клавіші перемикання рівня 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.