Если вы хотите связать всего несколько последовательностей вида Super+x, Super+c, Super+v с другими последовательностями, такими как, например, Ctrl+x, Ctrl+c, Ctrl+v, чтобы (по желанию OP) эти Определенные последовательности супер-ключей обычно сопоставляются для вырезания и вставки, не влияя на любое другое использование супер-ключа в вашей системе, это возможно, используя только расширение 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> {
В результате в первом примере соответствующие ключи имеют тип "ALPHABETIC", а во втором примере они имеют тип "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 так, чтобы они делали две вещи: добавляли преамбулу и пост-марку, делающие ее подходящим предложением 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 на втором шаге, во второй новый файл символов / вырезки, добавьте аналогичную преамбулу и разметку и измените определения, чтобы использовать новые типы, и добавьте действия в определение для обработки требуемого ключа. производится супер версиями. Результаты этого в наших двух примерах:
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".
Скопируйте системную версию rules / evdev (или каково бы ни было название вашего набора правил) в $ XKBLOCAL $ / rules / 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/.