ปัญหาการกดปุ่มเมื่อทำงานกับ Emacs และ Openbox


17

ฉันมีแป้นพิมพ์ของ Apple และฉันต้องทำการปรับแต่งแป้นใหม่เพื่อให้mod-4ปุ่มเป็นปุ่มแรกทางด้านซ้ายของSpaceแถบเมื่อทำงานกับ Emacs สคริปต์ด้านล่างทำงานได้ดีเมื่อฉันใช้ตัวจัดการหน้าต่าง dwm แต่หลังจากเปลี่ยนมาใช้ Openbox ฉันพบว่าแทนที่จะสลับรหัสระหว่างตัวเลือกและปุ่มคำสั่งทั้งสองแป้นกำลังทำสิ่งเดียวกัน

สิ่งหนึ่งที่ฉันสังเกตเห็นคือการตั้งค่าใหม่เมื่อฉันคลิกเรียกใช้showkeyและกดตัวเลือกและแป้นคำสั่งที่ฉันได้รับ 56 และ 125 ตามลำดับ แต่กุญแจเหล่านี้ไม่ทำงานเลยเมื่อใส่เข้าไปในสคริปต์ด้านล่างแทน 64 และ 133

ฉันต้องยอมรับว่าฉันสร้างสคริปต์ด้านล่างนี้โดย tweaking อย่างต่อเนื่องจนกว่ามันจะทำงานเพื่อให้มีวิธีที่ดีกว่ามากในการทำมัน

.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และปรับแต่งกุญแจที่นั่นแทน (ซึ่งง่ายกว่ามาก)

อย่างไรก็ตามสิ่งต่าง ๆ ยังไม่ถูกต้องนัก CapsLockฟังก์ชั่นยังคงเป็นไปตามปกติยกเว้นกรณีการ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
บนพีซี (ฉันไม่รู้ว่านี่เป็นจริงบน Macs) showkeyไม่แสดงรหัสคีย์เดียวกับที่ X ใช้ เรียกใช้xevเพื่อดูรหัส X และการกระทำของพวกเขา แสดงเอาท์พุทxmodmap -pmและเอาท์พุทของเราxevเมื่อคุณกดปุ่มแต่ละปุ่มที่เกี่ยวข้อง
Gilles 'หยุดชั่วร้าย'

ฉันเพิ่มการอัปเดตข้างต้นสำหรับคำสั่ง 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 เพื่อทำการแมป scancodes ใหม่กับ keycodes เฉพาะ
Centimane

คำตอบ:


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

การดำเนินการนี้จะอัปเดตระบบเพื่อให้จดจำลักษณะการปรับเปลี่ยนของปุ่มเหล่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.