Проблема с отображением ключей при работе с Emacs и Openbox


17

У меня есть клавиатура Apple, и мне пришлось сделать некоторые изменения клавиш, чтобы сделать mod-4клавишу первой клавишей слева от Spaceпанели при работе с Emacs. Приведенный ниже скрипт работал нормально, когда я использовал диспетчер окон dwm, но после переключения на Openbox я обнаружил, что вместо переключения кодов клавиш между клавишами выбора и команды оба ключа выполняют одно и то же.

Одна странная вещь, которую я заметил, была в новой настройке, когда я нажимаю showkeyкнопку «Выполнить» и нажимаю клавиши «Option» и «Command», я получаю 56 и 125 соответственно, но эти клавиши вообще не работают при вставке их в скрипт ниже вместо 64 и 133.

Я должен признать, что создал сценарий ниже, постоянно дорабатывая его до тех пор, пока он не сработает, так что может быть гораздо лучший способ сделать это.

.Xmodmap будет

# switch alt and command...the switch is not being done properly
xmodmap -e "keycode 64 = Alt_L"
xmodmap -e "keycode 133 = Meta_L"

# remap of mod 4
xmodmap -e "clear Mod4"
xmodmap -e "add Mod4 = Super_L"

Обновить

Я привык к предыдущей настройке клавиатуры и прекратил попытки ее настройки. К сожалению, после недавнего перезапуска, CapsLockчтобы Ctrlбольше не работал, так что я снова здесь.

На этот раз вместо использованного выше сопоставления я запустил xmodmap -pke > ~/.xmodи настроил там ключи (что намного проще).

Однако все еще не совсем правильно. Функция CapsLockStill работает как обычно, кроме случаев, когда xevкоманда запускается, затем она возвращает следующее, которое, по-видимому, показывает правильное отображение:

# caplock
KeyRelease event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4858000, (57,-31), root:(426,402),
state 0x2, keycode 66 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes: 
XFilterEvent returns: False

# ctrl-L
KeyRelease event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4805947, (686,148), root:(1055,581),
state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

# Alt-L
KeyPress event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4555825, (-158,-649), root:(959,133),
state 0x0, keycode 64 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

# Super-L
KeyRelease event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4920564, (-63,169), root:(306,602),
state 0x40, keycode 133 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

4
На ПК (я не знаю, верно ли это на Mac) showkeyне отображаются те же коды клавиш, которые использует X. Запустите, xevчтобы увидеть коды клавиш X и их действия. Покажите нам вывод xmodmap -pmи вывод xevпри нажатии каждой из задействованных клавиш.
Жиль "ТАК ... перестать быть злым"

Я добавил обновление выше для команды xmodmap -pm
chris

Вы можете посмотреть на wiki.archlinux.org/index.php/Apple_Keyboard и help.ubuntu.com/community/AppleKeyboard . Подводя итог, вы можете сказать, что драйвер клавиатуры в ядре должен вести себя по-другому, а не взламывать вещи в X.
wingedsubmariner

Если он работал в DWM, я думаю, что ~/.config/openbox/rc.xmlпроблема в конфликте .
MajorBriggs

Вы рассматривали возможность использования udev для переназначения ключей вместо xmodmap? udev просто потребовал бы файл hwdb для переназначения кодов сканирования в определенные коды клавиш.
Сентиман

Ответы:


1

Вы, вероятно, должны поместить следующее в начале вашего ~/.xmod

remove Lock = Caps_Lock
remove Control = Control_L
remove Mod1 = Alt_L Meta_L
remove Mod4 = Super_L Hyper_L

И следующее в нижней части ~/.xmod

add Control = Control_L
add Mod1 = Alt_L Meta_L
add Mod4 = Super_L Hyper_L

Это обновит систему для распознавания природы этих ключей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.