Emacs ve Openbox ile çalışırken tuş eşleme sorunu


17

Bir Apple klavyem var ve Emacs ile çalışırken mod-4anahtarı Spaceçubuğun solundaki ilk anahtar yapmak için tuşları yeniden eşleştirmem gerekiyordu . Aşağıdaki komut dosyası dwm pencere yöneticisini kullanırken iyi çalıştı, ancak Openbox'a geçtikten sonra seçenek ve komut tuşları arasında anahtar kodları değiştirmek yerine her iki tuşun da aynı şeyi yaptığını gördüm.

Fark ettiğim tek bir şey, çalıştırmayı tıkladığımda showkeyve sırasıyla 56 ve 125'i aldığım seçenek ve komut tuşlarına bastığımda yeni kurulumdaydı , ancak bu tuşlar 64 yerine aşağıdaki komut dosyasına eklerken hiç çalışmıyor. 133.

İtiraf etmeliyim ki, senaryoyu çalışana kadar sürekli değiştirerek oluşturduğumu itiraf etmeliyim ki bunu yapmanın çok daha iyi bir yolu olabilir.

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

Güncelleme

Önceki klavye kurulumuna alıştım ve ince ayar yapmaya çalışmayı bıraktım. Son bir yeniden başlatma sonrasında Maalesef CapsLockiçin Ctrlartık o kadar burada çalıştı ben yine buradayım.

Bu sefer yukarıda kullanılan haritalama yerine koştum xmodmap -pke > ~/.xmodve oradaki tuşları değiştirdim (ki bu çok daha kolay).

Ancak, işler hala doğru değil. CapsLockZaman dışında normal olarak hala işlevleri xevkomut çalıştırılır, o zaman doğru eşleştirmeyi göstermek gibi görünüyor yapar aşağıdakileri verir:

# 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
PC'lerde (bunun Mac'lerde de geçerli olup olmadığını bilmiyorum) showkeyX'in kullandığı anahtar kodlarını göstermiyor. xevX anahtar kodlarını ve eylemlerini görmek için çalıştırın . İlgili tuşların her birine bastığınızda xmodmap -pmçıktısını ve çıktısını bize gösterin xev.
Gilles 'SO- kötü olmayı bırak'

Yukarıda xmodmap -pm komutu için bir güncelleme ekledim
chris

Wiki.archlinux.org/index.php/Apple_Keyboard ve help.ubuntu.com/community/AppleKeyboard'a göz atmak isteyebilirsiniz . Özetlemek gerekirse, çekirdekteki klavye sürücüsüne X'teki şeyleri kesmek yerine farklı davranmasını söyleyebilirsiniz.
wingedsubmariner

Eğer DWM'de çalışıyor olsaydı, sanırım ~/.config/openbox/rc.xmlsorun bir sorun.
MajorBriggs

Xmodmap yerine anahtarları yeniden eşlemek için udev kullanmayı düşündünüz mü? udev, tarama kodlarını belirli anahtar kodlarına yeniden eşlemek için sadece bir hwdb dosyası gerektirir.
Centimane

Yanıtlar:


1

Muhtemelen aşağıdakileri cihazınızın başına yerleştirmeniz gerekir: ~/.xmod

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

Ve aşağıdaki ~/.xmod

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

Bu, sistemi bu anahtarların değiştirici niteliğini tanıyacak şekilde güncelleyecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.