Problema de asignación de teclas al trabajar con Emacs y Openbox

17

Tengo un teclado de Apple y tuve que hacer una reasignación de las teclas para que la mod-4tecla sea la primera tecla a la izquierda de la Spacebarra para trabajar con Emacs. El siguiente script funcionó bien cuando estaba usando el administrador de ventanas dwm, pero después de cambiar a Openbox descubrí que, en lugar de intercambiar códigos de teclas entre las teclas de opción y comando, ambas teclas están haciendo lo mismo.

Una cosa extraña que noté fue en la nueva configuración cuando hago clic en Ejecutar showkeyy presiono las teclas de opción y comando. Obtengo 56 y 125 respectivamente, pero estas teclas no funcionan en absoluto cuando las inserto en el siguiente script en lugar de las 64 y 133)

Debo admitir que creé el script a continuación modificándolo continuamente hasta que funcionó para que pudiera haber una forma mucho mejor de hacerlo.

.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"

Actualizar

Me acostumbré a la configuración anterior del teclado y dejé de intentar modificarlo. Desafortunadamente, después de un reinicio reciente del CapsLockque Ctrlya no funcionaba así que aquí estoy de nuevo.

Esta vez, en lugar del mapeo utilizado anteriormente, ejecuté xmodmap -pke > ~/.xmody ajusté las teclas allí (lo cual es mucho más fácil).

Sin embargo, las cosas todavía no están del todo bien. La imagen CapsLockfija funciona normalmente, excepto cuando xevse ejecuta el comando, luego devuelve lo siguiente, que parece mostrar la asignación correcta:

# 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
Chris
fuente
44
En las PC (no sé si esto también es cierto en Mac) showkeyno muestra los mismos códigos de teclas que X usa. Corre xevpara ver los códigos de teclas X y sus acciones. Muéstrenos la salida xmodmap -pmy la salida de xevcuando presiona cada una de las teclas involucradas.
Gilles 'SO- deja de ser malvado'
Agregué una actualización anterior para el comando xmodmap -pm
chris
Es posible que desee echar un vistazo a wiki.archlinux.org/index.php/Apple_Keyboard y help.ubuntu.com/community/AppleKeyboard . En resumen, se puede decir que el controlador de teclado en el kernel a comportarse de manera diferente, en lugar de cortar las cosas en X.
wingedsubmariner
Si funcionaba en DWM, supongo que ~/.config/openbox/rc.xmlel problema es un conflicto .
MajorBriggs
¿Ha considerado usar udev para reasignar claves en lugar de xmodmap? udev solo requeriría un archivo hwdb para reasignar los códigos de escaneo a códigos clave específicos.
Centimane

Respuestas:

1

Probablemente necesite colocar lo siguiente al comienzo de su ~/.xmod

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

Y lo siguiente en la parte inferior de ~/.xmod

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

Esto actualizará el sistema para reconocer la naturaleza del modificador de estas teclas.

billyjmc
fuente