7

Название говорит само за себя: мне интересно подражать поведению Windows, где левый Ctrl + левый Alt действует как селектор 3-го уровня. Это относительно важно для меня, потому что, как программист, на моей раскладке клавиатуры важные символы, такие как { , [ , ] или } , доступны только при нажатии правой клавиши Alt + Key , что крайне неудобно при использовании только одной руки. На данный момент я использую обе клавиши Alt в качестве выбора уровня 3, но это имеет некоторые нежелательные последствия, так как я больше не могу вводить некоторые сочетания клавиш (например, Home в Firefox).

Я нахожусь на openSuse 13.1, используя XFCE в качестве рабочего стола. Этот вопрос уже задавался пару раз, но, к сожалению, ни на один из них не было дано ответа, и документации по xkb довольно мало.

1 ответ1

0

Следующее решение является варварским, но оно работает (при условии, что вы будете удовлетворены защелкой уровня 3 вместо сдвига уровня 3) - разница в том, что при последней все клавиши должны нажиматься одновременно, а при первой нажмите LeftCtrl+LeftAlt, отпустите это и только затем нажмите клавишу, которая будет сдвинута) и не требует рута.

setxkbmap -option grp:lctrl_lalt_toggle

xmodmap -e 'keycode  37 = Control_L ISO_Level3_Latch'
xmodmap -e 'keycode  64 = Alt_L ISO_Level3_Latch'

Объяснение того, как это работает:

Параметр xkb grp:lctrl_lalt_toggle заставляет LeftCtrl смещать LeftAlt на level2 и наоборот (см. /usr/share/X11/xkb/symbols/group). Это также делает сдвиг level2 LeftCtrl и LeftAlt равным ISO_Next_Group, что нежелательно, так как мы хотим, чтобы это было ISO_Level3_Latch, поэтому мы используем xmodmap для изменения level2 на ISO_Level3_Latch для обоих LeftCtrl и LeftAlt (сохраняя level1 как Control_L и Alt_) , Коды клавиш (37 и 64) можно найти, проверив вывод xmodmap -pke или используя xev .

Если бы мы применили только переопределения xmodmap (без использования сначала setxkbmap), то ключ, отвечающий за сдвиг level2, был бы Shift, как и почти для всех клавиш, поэтому Shift+LeftCtrl и Shift+LeftAlt (но не LeftCtrl+LeftAlt) стать защелки уровня 3.

Почему мы должны использовать защелку уровня 3, а не сдвиг уровня 3?

Если бы вы использовали ISO_Level3_Shift, а не ISO_Level3_Latch, вам придется одновременно нажимать LeftCtrl+LeftAlt+YourDesiredKey, чтобы произошел сдвиг уровня 3. К сожалению, LeftCtrl и LeftAlt по- прежнему остаются модификаторами, поэтому, кроме корректного смещения YourDesiredKey, он также будет "изменен" одним из Alt или Ctrl (в зависимости от того, что вы нажали первым). С защелкой у вас нет этой проблемы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .