Masalah penekanan tombol saat bekerja dengan Emacs dan Openbox

17

Saya memiliki keyboard Apple dan saya harus melakukan pemetaan ulang tombol untuk membuat mod-4kunci menjadi tombol pertama di sebelah kiri Spacebilah ketika bekerja dengan Emacs. Script di bawah ini bekerja dengan baik ketika saya menggunakan window manager DWM, tetapi setelah beralih ke Openbox saya menemukan bahwa alih-alih menukar kode kunci antara opsi dan kunci perintah, kedua tombol melakukan hal yang sama.

Satu hal aneh yang saya perhatikan, ada pada pengaturan baru ketika saya klik jalankan showkeydan tekan opsi dan tombol perintah saya mendapatkan masing-masing 56 dan 125, tetapi tombol-tombol ini tidak berfungsi sama sekali ketika memasukkannya ke dalam skrip di bawah ini daripada 64 dan 133.

Saya harus mengakui bahwa saya membuat skrip di bawah ini dengan terus-menerus mengubah skrip hingga berfungsi sehingga ada cara yang lebih baik untuk melakukannya.

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

Memperbarui

Saya terbiasa dengan pengaturan keyboard sebelumnya dan menyerah mencoba untuk men-tweak itu. Sayangnya, setelah restart baru-baru ini CapsLockuntuk Ctrltidak lagi berfungsi jadi saya di sini lagi.

Kali ini alih-alih pemetaan yang digunakan di atas, saya malah menjalankan xmodmap -pke > ~/.xmoddan mengubah tombol di sana (yang jauh lebih mudah).

Namun, hal-hal masih belum sepenuhnya benar. The CapsLockfungsi masih seperti biasa kecuali jika xevperintah dijalankan, maka ia mengembalikan berikut yang tidak tampaknya menunjukkan pemetaan yang benar:

# 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
sumber
4
Pada PC (saya tidak tahu apakah ini juga berlaku pada Mac) showkeytidak menunjukkan kode kunci yang sama dengan yang digunakan X. Jalankan xevuntuk melihat kode kunci X dan tindakannya. Tunjukkan pada kami output xmodmap -pmdan output xevketika Anda menekan setiap tombol yang terlibat.
Gilles 'SO- stop being evil'
Saya menambahkan pembaruan di atas untuk perintah xmodmap -pm
chris
Anda mungkin ingin melihatnya di wiki.archlinux.org/index.php/Apple_Keyboard dan help.ubuntu.com/community/AppleKeyboard . Untuk meringkas, Anda dapat memberitahu driver keyboard di kernel untuk berperilaku berbeda, daripada meretas hal-hal di X.
wingedsubmariner
Jika bekerja di DWM saya duga adalah bahwa konflik dengan ~/.config/openbox/rc.xmlisu tersebut.
MajorBriggs
Sudahkah Anda mempertimbangkan untuk menggunakan udev untuk memetakan kembali kunci alih-alih xmodmap? udev hanya memerlukan file hwdb untuk memetakan ulang scancodes keycode tertentu.
Centimane

Jawaban:

1

Anda mungkin perlu menempatkan yang berikut di awal ~/.xmod

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

Dan berikut ini di bagian bawah ~/.xmod

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

Ini akan memperbarui sistem untuk mengenali sifat pengubah dari tombol-tombol ini.

billyjmc
sumber