Как привязать заглавные буквы к клавишам со стрелками?

Я пытаюсь отобразить Caps Lock на клавишу со стрелкой вниз, а Caps Lock с модификатором сдвига на клавишу со стрелкой вверх.

Я пытался использовать xmodmap со следующим входным файлом:

remove Lock = Caps_Lock
keycode 66 = Down Up

Нажатие кнопки caps lock работает для отправки клавиши со стрелкой вниз, но нажатие кнопки caps lock + shift не отправляет вверх.

Что я делаю не так?

5
задан 6 February 2018 в 12:42

1 ответ

В этом решении будет много технических деталей. Не стесняйтесь переходить к разделу файла макета , если вас не волнует проблема, а только ее решение.

xmodmap

Перемещение вверх и вниз с помощью CAPS и Shift + CAPS работает в моей системе с заданной .Xmodmap как и ожидалось.

Вы проверяете, действительно ли на ваши настройки влияют, вызывая

$ xmodmap -pk | grep ^\\s*66
     66     0xffe5 (Caps_Lock)  0x0000 (NoSymbol)   0xffe5 (Caps_Lock)
$ setxkbmap -layout us && xmodmap ~/.Xmodmap
$ xmodmap -pk | grep ^\\s*66
     66     0xff54 (Down)   0xff52 (Up)

модификатор LEVEL2

Существует еще одна (реальная) проблема в вашем вопросе, которая возникает следующим образом:

Модификатор LEVEL2 <SHIFT>, который активируется нажатием кнопки Shift , предназначен для визуальной маркировки символов в текстовом редакторе при перемещении по строкам с помощью клавиш со стрелками. Если вы назначите <UP> второму уровню <CAPS>, то, что вы фактически делаете, это нажимаете Shift + . Вы должны деактивировать модификатор Shift только для этого сценария. Afaik вы не можете сделать это с помощью xmodmap.

Перенаправление модификатора LEVEL2

«Реальный способ» изменения ключей - это xkb . Я нашел решение в старом списке рассылки xorg . LEVEL2 из Caps должен быть перенаправлен на клавишу (<UP>) (кстати, Up-Key имеет только один уровень.) На X.org вы можете деактивировать модификатор Shift во время перенаправления со встроенной функцией RedirectKey(key=<UP>, clearmods=Shift). clearmods «освобождает» модификатор Shift до того, как клавиша фактически «нажата».

файл макета

Самый простой способ активировать поведение - создать новый файл макета:

/ usr / share / X11 / xkb / symbols / capslockarrow

default partial xkb_symbols "basic" {

    include "de(basic)"
    include "shift(both_capslock_cancel)"

    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Down, NoSymbol ],
        actions[Group1] = [ NoAction(), RedirectKey(key=<UP>, clearmods=Shift) ]
    };
 };

активируйте новый макет с помощью

setxkbmap capslockarrow

Примечания к файлу макета

  • Новый файл макета происходит от de(basic). Это раскладка стандартной немецкой клавиатуры . Здесь вы можете добавить любой другой макет, например, us(basic) или us(euro). см. /usr/share/X11/xkb/symbols/, чтобы получить представление о том, что возможно. Двухбуквенный код - это имя файла, а в скобках - соответствующее xkb_symbols определение из файла.

  • У вас больше не будет модификатора ключа заглавных букв. Поэтому я добавил своего рода замену для Caps : shift(both_capslock_cancel) Нажав одновременно LSHIFT и RSHIFT , вы можете активировать CAPS Lock. и вы снова снимаете блокировку любым другим нажатием клавиши Shift .

  • Если кому-то интересно, почему я не использовал для этого новое определение типа: я просто не мог выпустить модификатор Shift до того, как сработала клавиша «вверх». Отпускание клавиши Shift должно быть возможно путем явного вызова preserve[Shift] = None в отдельном xkb_types.

  • Как указано в комментариях ниже, Wayland также будет полагаться на XKB, но не будет разрешать перенаправления.

3
ответ дан 6 February 2018 в 12:42

Другие вопросы по тегам:

Похожие вопросы: