Vấn đề về sơ đồ bàn phím khi làm việc với Emacs và Openbox


17

Tôi có một bàn phím Apple và tôi đã phải thực hiện một số thao tác ánh xạ lại các phím để biến mod-4phím này thành phím đầu tiên ở bên trái của Spacethanh khi làm việc với Emacs. Kịch bản dưới đây hoạt động tốt khi tôi đang sử dụng trình quản lý cửa sổ dwm, nhưng sau khi chuyển sang Openbox tôi đã thấy rằng thay vì hoán đổi mã phím giữa tùy chọn và phím lệnh, cả hai phím đều làm điều tương tự.

Một điều kỳ lạ tôi nhận thấy, là trên thiết lập mới khi tôi nhấp chạy showkeyvà nhấn tùy chọn và các phím lệnh tôi nhận được 56 và 125 tương ứng, nhưng các phím này hoàn toàn không hoạt động khi chèn chúng vào tập lệnh bên dưới thay vì 64 và 133.

Tôi phải thừa nhận tôi đã tạo tập lệnh bên dưới bằng cách liên tục chỉnh sửa nó cho đến khi nó hoạt động để có thể có cách làm tốt hơn nhiều.

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

Cập nhật

Tôi đã quen với việc thiết lập bàn phím trước đó và từ bỏ việc cố gắng điều chỉnh nó. Thật không may, sau một lần khởi động lại gần đây, CapsLockCtrlkhông còn hoạt động nữa nên tôi lại ở đây.

Lần này thay vì ánh xạ được sử dụng ở trên, tôi đã chạy xmodmap -pke > ~/.xmodvà điều chỉnh các phím ở đó thay vào đó (dễ dàng hơn nhiều).

Tuy nhiên, mọi thứ vẫn chưa hoàn toàn đúng. Các CapsLockchức năng tĩnh như bình thường ngoại trừ khi xevlệnh được chạy, sau đó nó trả về các mục sau đây dường như hiển thị ánh xạ chính xác:

# 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
Trên PC (tôi không biết điều này cũng đúng trên máy Mac) showkeykhông hiển thị cùng mã phím mà X sử dụng. Chạy xevđể xem mã khóa X và hành động của họ. Chỉ cho chúng tôi đầu ra xmodmap -pmvà đầu ra xevkhi bạn nhấn từng phím liên quan.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi đã thêm một bản cập nhật ở trên cho lệnh xmodmap -pm
chris

Bạn có thể muốn có một cái nhìn tại wiki.archlinux.org/index.php/Apple_Keyboardhelp.ubuntu.com/community/AppleKeyboard . Để tóm tắt, bạn có thể yêu cầu trình điều khiển bàn phím trong kernel hoạt động khác đi, thay vì hack mọi thứ trong X.
wingbedubmariner

Nếu nó hoạt động trong DWM, tôi đoán đó là một ~/.config/openbox/rc.xmlvấn đề mâu thuẫn .
MajorBriggs

Bạn đã cân nhắc sử dụng udev để ánh xạ lại các phím thay vì xmodmap chưa? udev sẽ chỉ yêu cầu một tệp hwdb để ánh xạ lại các đoạn mã vào các mã khóa cụ thể.
Centimane

Câu trả lời:


1

Bạn có thể cần phải đặt sau đây ở đầu của bạn ~/.xmod

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

Và sau đây ở dưới cùng của ~/.xmod

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

Điều này sẽ cập nhật hệ thống để nhận ra bản chất sửa đổi của các phím này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.