Якщо ви хочете зв’язати лише декілька послідовностей форми Super + x, Super + c, Super + v з іншими послідовностями, такими як Ctrl + x, Ctrl + c, Ctrl + v, наприклад, таким чином, щоб (як бажає ОП) ці конкретні послідовності Супер-ключів, як правило, відображаються для вирізання та вставки, не впливаючи на будь-яке інше використання клавіші Super у вашій системі, можливо, використовуючи лише розширення XKB. Наведена нижче процедура описує кроки та дає два різних приклади деталей для двох різних налаштувань клавіатури; сподіваємось, це дасть достатньо інформації для адаптації до вашої системи. Це передбачає, що вам зручно створювати та редагувати файли у вашій системі, включаючи файли в таких місцях системи /usr/share/X11/xkb
.
Вирішіть, де ви хочете, щоб ваше дерево конфігурації XKB знаходилось. Спочатку знайдіть систему. Зазвичай це в / usr / share / X11 / xkb, і я не зовсім впевнений, як його знайти, якщо його немає; ви можете просто шукати у своїй системі каталоги під назвою "xkb". Як би там не було, ви можете або змінити систему на місці, або ви можете скористатися будь-яким каталогом на ваш вибір. Перевага використання системного каталогу полягає в тому, що ви можете набагато легше викликати свої зміни, але недолік полягає в тому, що майбутні оновлення системи можуть замінити ваші зміни (вас попереджали). У будь-якому випадку всі названі нижче файли відносяться до цього каталогу, який я буду називати, коли потрібно, як $ XKBLOCAL $, а всі команди припускають, що це ваша поточна директорія.
Визначте, що "тип" XKB ключа є поточними клавішами x, c, v. Найпростіший спосіб зробити це за допомогою команди xkbcomp -a $DISPLAY - | grep -C 6 c,
(зауважте, що кома навмисне включена в шаблон). У моєму першому прикладі налаштування це створює:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
тоді як в моєму іншому прикладі налаштування це створює
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
Підсумок полягає в тому, що в першому прикладі відповідні клавіші мають тип "ALFHABETIC", тоді як у другому прикладі вони мають тип "FOUR_LEVEL". Залежно від налаштування вашої клавіатури, ви можете виявити, що вони взагалі іншого типу. У подальшому тип буде позначатися як $ TYPE $, який потрібно замінити фактичним рядком ALPHABETIC або будь-яким іншим у наведених нижче командах.
Знайдіть визначення $ TYPE $ і скопіюйте його в новий файл у каталозі $ XKBLOCAL $ / types. Ось команда , яка робить саме це: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Ім'я файлу "cutpaste", який я вибрав, є довільним, використовуйте будь-яке ім'я, яке вам подобається, але зауважте, що вам доведеться послідовно посилатися на цей файл у наступних кроках. Під час першої установки цей файл отримує вміст
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
а в іншому прикладі він отримує вміст
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Відредагуйте типи файлів / cutpaste, щоб зробити дві речі: додати преамбулу та postamble, що робить її належним пунктом XKB, а також змінити ім'я типу та визначення типу, щоб додати ще один рівень, створений модифікатором, відповідним Super. Ви повинні перевірити, що цей модифікатор у вашій системі, ймовірно, Mod4, як використовується нижче. Необхідні зміни повинні бути видно з двох прикладних остаточних версій типів / пасти, а саме:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
і
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Скопіюйте визначення ключових символів, які були виведені grep на другому кроці, у другий новий символ символів / cutpaste та додайте аналогічну преамбулу та postamble, а також модифікуйте визначення, щоб використовувати нові типи та додайте дії до визначення для обробки потрібного ключа виробляється версіями Super. Результати цього на наших двох прикладах:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
і
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Зауважте, що у другому прикладі я вичавив частину (несуттєвого) простору пробілів, щоб тримати лінію трохи під контролем.
Знайдіть назву набору правил, якими XKB зараз користується. Це легко, це показано в результаті setxkbmap -query
. У моєму випадку це був "евдев".
Скопіюйте системну версію правил / evdev (або як би не було назва ваших правил) у $ XKBLOCAL $ / правила / evdev та додайте правила, що вказують на створені нами параметри. Тут є два варіанти: ви можете скопіювати всі evdev або лише частини, згадуючи модель клавіатури, макет, варіант та параметри, які ви фактично використовуєте. Звичайно, якщо ви змінюєте системні файли на місці, вам не потрібно робити копіювання, а лише редагування.
У цьому випадку те, що додається, ідентичне незалежно від початкової настройки клавіатури, тому є лише один приклад. Ви знаходите розділ файлу правил, який починається з, ! option = symbols
і додаєте рядок cutpaste:super = +cutpaste
до цього розділу, а також ви знайдете розділ файла правил, який починається з, ! option = types
і рядок cutpaste:super = +cutpaste
до цього розділу.
Скопіюйте системну версію evdev.lst та додайте рядок для нового параметра. Зауважте, що ім'я цього файлу просто відповідає імені файлу правил із доданим .lst. Як і в попередньому кроці, ви можете скопіювати весь файл або лише частину, на яку посилається модель, макет, варіант та параметри, які ви використовуєте. Вам просто потрібно знайти розділ цього файлу, який починається з цього пункту, ! option
і додати такий рядок: cutpaste:super Add super equivalents of cut and paste operations
до цього розділу.
Гаразд, тепер усі файли конфігурації на місці. Якщо ви змінили системні файли, тепер ви можете викликати нову опцію за допомогою setxkbmap -option cutpaste:super
. З іншого боку, якщо ви цього не зробили, ви повинні повідомити setxkbmap, де знаходиться ваш каталог $ XKBLOCAL $. Що ще гірше, сервер також не знає, де знаходиться цей каталог, а setxkbmap не (або, можливо, не може, оскільки в кінцевому підсумку сервер може працювати на іншій машині). Тож вам доведеться передати висновок setxkbmap в xkbcomp, а також сказати цій команді, де знаходиться ваш каталог $ XKBLOCAL. Отже, повний командний рядок setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Сподіваємось, це комусь допоможе / зацікавить, оскільки хороша остаточна документація / довідник XKB є мало. Одним з дуже корисних посилань був http://madduck.net/docs/extending-xkb/ .