Вопрос или проблема
Я использую
- arch kernel 5.7.3-arch1-1, и
- openbox, и
- neo vim 0.4.3, и
- ноутбук/клавиатуру Lenovo ThinkPad T430.
Все системные пакеты обновлены.
Я пытаюсь поменять местами клавиши Caps Lock и Escape для использования в neoVim и использовал эту команду
setxkbmap -option caps:swapescape
Это устанавливает клавишу Escape как переключатель Caps, как и ожидалось, но ничего не делает с клавишей Caps Lock.
Я ожидаю, что клавиша Caps Lock будет работать как клавиша Escape, но она не работает.
Может ли кто-нибудь подсказать, как мне это сделать и почему Caps Lock не работает с использованием вышеуказанной команды?
Насколько я понимаю, это нельзя сделать в файле .vimrc
nvim.
Ниже вывод xev
при нажатии и отпускании escape
, keycode 9
KeyPress event, serial 48, synthetic NO, window 0x3200001,
root 0x139, subw 0x0, time 75547017, (621,536), root:(792,564),
state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
XLookupString gives 1 bytes: (1b) "
mbLookupString gives 1 bytes: (1b) "
FilterEvent returns: False
KeyRelease event, serial 48, synthetic NO, window 0x3200001,
root 0x139, subw 0x0, time 75547079, (621,536), root:(792,564),
state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
XLookupString gives 1 bytes: (1b) "
FilterEvent returns: False
Ниже вывод xev
при нажатии и отпускании caps lock
, keycode 66
FocusOut event, serial 48, synthetic NO, window 0x4800001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 48, synthetic NO, window 0x4800001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 48, synthetic NO, window 0x0,
keys: 57 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeyRelease event, serial 48, synthetic NO, window 0x4800001,
root 0x139, subw 0x0, time 75680956, (272,352), root:(443,380),
state 0x2, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
это можно сделать с помощью xmodmap.
Поменяйте клавиши местами с помощью.
xmodmap -e "keycode 9 = Caps_Lock"; xmodmap -e "keycode 66 = Escape"
затем это действие можно отменить с помощью
xmodmap -e "keycode 66 = Caps_Lock"; xmodmap -e "keycode 9 = Escape"
Не уверен, подходит ли это вам, потому что это влияет на все процессы в X-сессии.
keyd это универсальный способ переназначить клавиши, но он не позволяет переназначать клавиши для конкретных программ. (У него есть экспериментальный keyd-application-mapper
, но он предназначен только для оконных приложений на конкретных оконных менеджерах.) То, что вы предлагаете, было бы невозможно, или, по крайней мере, несовершенно, так как escape будет переназначен на capslock всякий раз, когда neovim открыт, даже если он не в фокусе/не используется.
Тем не менее, keyd считается “универсальным”, потому что он работает независимо от сессии – X11, wayland, даже TTY. Я использую его уже несколько месяцев без проблем.
Для установки и настройки этого модуля, смотрите GitHub (ссылка выше) или выполните следующие команды (предполагая, что вы используете systemd):
cd
git clone https://github.com/rvaiya/keyd
cd keyd
make
sudo make install
Теперь отредактируйте /etc/keyd/default.conf
и вставьте следующее:
[ids]
*
[main]
escape=capslock
capslock=escape
Затем включите и запустите службу keyd:
sudo systemctl enable --now keyd
.
Ответ или решение
Для решения задачи переназначения клавиш Caps Lock и Escape на вашем ноутбуке Lenovo ThinkPad T430 с использованием Arch Linux, Openbox и NeoVim, предлагаем несколько методов, каждый из которых подходит под разные сценарии. Обратите внимание, что ваша текущая команда setxkbmap -option caps:swapescape
оказывается недостаточной для выполнения этой задачи, поскольку она переназначает только Escape на Caps Lock, но не наоборот.
Метод 1: Использование xmodmap
xmodmap
– это утилита для изменения раскладки клавиатуры в X-сессиях. Вы можете использовать его для переназначения клавиш следующим образом:
-
Создайте файл конфигурации для
xmodmap
:Откройте файл, где будут определены изменения, например,
.Xmodmap
в вашем домашнем каталоге:nano ~/.Xmodmap
-
Добавьте следующую конфигурацию:
keycode 9 = Caps_Lock keycode 66 = Escape
Эти команды указывают системе использовать Caps Lock вместо Escape и Escape вместо Caps Lock.
-
Примените конфигурацию:
Запустите команду для применения изменений:
xmodmap ~/.Xmodmap
Учтите, что эти изменения применяются только в текущей X-сессии.
Метод 2: Использование keyd
keyd
— это универсальный инструмент для переназначения клавиш, работающий в различных средах: X11, Wayland, TTY. Этот метод позволяет более широко управлять клавиатурными раскладками.
-
Установка
keyd
:Сначала клонируйте репозиторий и установите
keyd
:cd ~ git clone https://github.com/rvaiya/keyd cd keyd make sudo make install
-
Настройка
keyd
:Откройте конфигурационный файл
/etc/keyd/default.conf
и внесите изменения:sudo nano /etc/keyd/default.conf
Добавьте следующие строки:
[ids] * [main] escape=capslock capslock=escape
-
Активируйте и запустите
keyd
:Используйте
systemd
для активации сервиса:sudo systemctl enable --now keyd
Заключение
Каждый из предложенных методов имеет свои преимущества: xmodmap
прост в использовании для X-сессий, в то время как keyd
более универсален и может работать независимо от среды отображения. Выбор подходящего метода зависит от вашего рабочего окружения и предпочтений. В любом случае, убедитесь, что выбранный вами способ адресует все ваши потребности и учитывает специфику вашей системы.