Ánh xạ Super + hjkl vào các phím mũi tên trong X


23

Tôi đang cố gắng lập bản đồ:

Super+h -> Left
Super+j -> Down
Super+k -> Up
Super+l -> Right

trên toàn cầu theo X. Ý tưởng là tôi không muốn rời khỏi hàng nhà của mình mà thường sử dụng các phím mũi tên, vì vậy tôi sẽ sử dụng Super modifier + hjkl để mô phỏng các phím mũi tên trong X. Có cách nào để làm điều này không ?

Một điều tôi đã thử là xbindkeys + xte bằng cấu hình này:

"xte 'keydown Up' 'keyup Up'"
  Mod4+k

"xte 'keydown Down' 'keyup Down'"
  Mod4+j

"xte 'keydown Left' 'keyup Left'"
  Mod4+h

"xte 'keydown Right' 'keyup Right'"
  Mod4+l

nhưng dường như có một sự chậm trễ lớn giữa tôi nhấn phím và nhận thấy bất kỳ kết quả nào, và hầu hết thời gian không có gì xảy ra cả.

Có cách nào thanh lịch hơn để làm điều này thực sự hoạt động không chậm trễ?


2
Đã thấy điều này là tuyệt vời để làm điều này: code.google.com/p/autokey
Tom Power

HĐH là gì? Tôi cũng nghĩ rằng bạn có thể tốt hơn khi sử dụng Control-Super hoặc một số kết hợp như vậy.
harrymc

Câu trả lời:


15

Capslock + HJKL vào các phím mũi tên

  1. Tạo ~ / .Xmodmap và đặt cái này vào trong:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Thêm Left, Down, Up, Rightnhư là một mục thứ ba đến h, j, k, l mục quan trọng trong /usr/share/X11/xkb/symbols/us(phần đầu tiên):

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  3. chạy xmodmap ~/.Xmodmap

Thay thế: Capslock dưới dạng Control và Control_L + HJKL cho các phím mũi tên

Đây là thiết lập hiện tại của tôi. Tôi đã hủy điều khiển Control_L làm khóa điều khiển và sử dụng nó làm công cụ sửa đổi đặc biệt (ISO_Level3_Shift), tương ứng với mục thứ ba trong /usr/share/X11/xkb/symbols/ustệp cho ánh xạ hjkl.

  1. Tôi đã sửa đổi khổ thơ đầu tiên của / usr / share / X11 / xkb / biểu tượng / chúng tôi như trước đây:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Sau đó, tôi đặt nó trong tập tin ~ / .Xmodmap của mình:

    clear Control
    keycode 66 = Control_L
    add Control = Control_L
    add Control = Control_R
    keycode 37 = ISO_Level3_Shift
    

keycode 66là capslock và keycode 37được kiểm soát trái

  1. chạy xmodmap ~ / .Xmodmap

Với thiết lập này, tôi có thể sử dụng các phím mũi tên với Control_L + hjkl cũng như bỏ qua các từ với Control_L + caps + hl. Dễ dàng!


1
Điều này cũng hoạt động trên Arch Linux, nhưng không phải ngay sau lệnh xmodmap. Sau khi khởi động lại, hoạt động gần như hoàn hảo. Chỉ không thể thực hiện CTRL + SHIFT + mũi tên bằng CTRL + SHIFT + CAPS + hjkl, thường để chọn từ. Bất kỳ ý tưởng làm thế nào để làm điều này?
koss

Hmm bạn đúng, tốt nhất tôi có thể làm là thêm Trái, Xuống, Lên, Phải lại vào một cột khác. Điều này không làm nổi bật công việc nhưng nó sẽ bỏ qua các từ như bình thường. Tôi sẽ phải xem xét điều này nhiều hơn.
William Casarin

Điều này hoạt động đủ tốt cho tôi. Vấn đề duy nhất tôi gặp phải, nó không hoạt động trong Chrome và đó là một sự phiền toái.
Tâm trạng

Bạn có thể cần xóa các tệp xkb được lưu trong bộ nhớ cache /var/lib/xkb/*.xkmđể các thay đổi /usr/share/X11/xkb/symbols/uscó hiệu lực.
solo

1
Điều này hoạt động trên Ubuntu 14.04. Tôi đã phải tạo xmodmap /home/alex/.Xmodmapmột ứng dụng khởi động và xóa tất cả các tệp * .xkm mẫu / var / lib / xkb. Cảnh báo: Tôi đã xử lý một máy ảo Ubuntu thực hiện bước cuối cùng này và sau đó bàn phím của tôi sẽ không hoạt động nữa, vì vậy hãy cẩn thận và sẵn sàng sao lưu :-) Shift + Control + Caps + hjkl để chọn văn bản hoạt động tốt trong Firefox và Thunderbird, nhưng trong một số ứng dụng thì không (Chrome chẳng hạn)
Alexander Rechsteiner

8

Các thay đổi được đề cập ở trên trong / usr / share / X11 / xkb / biểu tượng / chúng tôi KHÔNG hoạt động đối với tôi:
Lỗi khi tải mô tả bàn phím mới

Nhưng sau khi xem qua rất nhiều mâu thuẫn, tôi đã tìm ra một giải pháp, ánh xạ siêu khóa trái (phím cửa sổ bên trái / Mod4) kết hợp với hjkl sang Trái, Xuống, Lên, Phải. Đây là một thiết lập toàn hệ thống.

Thêm khối này vào cuối phần đầu tiên (ngay trước };) của / usr / share / X11 / xkb /bols / us :

//hjkl
//AltGr + hjkl
key <AC06> {        [         h, H, Left            ]       };
key <AC07> {        [         j, J, Down            ]       };
key <AC08> {        [         k, K, Up              ]       };
key <AC09> {        [         l, L, Right           ]       };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] }; //see below!

Dòng khóa đầu tiên ánh xạ AltGr + h sang Trái.
Dòng khóa cuối cùng làm cho siêu khóa bên trái hoạt động giống như AltGr.
Ở đây bạn đi:

Super + h -> Left
Super + j -> Down
Super + k -> Up
Super + l -> Right

Để áp dụng các cài đặt mới, hãy chạy setxkbmap hoặc khởi động lại hệ thống của bạn.

Quan trọng : Điều này rõ ràng vô hiệu hóa siêu khóa, vì vậy nếu bạn thực sự sử dụng siêu khóa của mình cho các mục đích khác (tức là di chuyển cửa sổ sang không gian làm việc khác), bạn không nên sử dụng lại như thế này.
Để sử dụng Caps Lock thay vì Super, hãy thay đổi dòng khóa cuối cùng bằng:

key <CAPS> { [ ISO_Level3_Shift ] };

Đây là phần đầu tiên hoàn chỉnh của tập tin cấu hình của tôi:

default
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    name[Group1]= "English (US)";

    // Alphanumeric section
    key <TLDE> {        [     grave,    asciitilde      ]       };
    key <AE01> {        [         1,    exclam          ]       };
    key <AE02> {        [         2,    at              ]       };
    key <AE03> {        [         3,    numbersign      ]       };
    key <AE04> {        [         4,    dollar          ]       };
    key <AE05> {        [         5,    percent         ]       };
    key <AE06> {        [         6,    asciicircum     ]       };
    key <AE07> {        [         7,    ampersand       ]       };
    key <AE08> {        [         8,    asterisk        ]       };
    key <AE09> {        [         9,    parenleft       ]       };
    key <AE10> {        [         0,    parenright      ]       };
    key <AE11> {        [     minus,    underscore      ]       };
    key <AE12> {        [     equal,    plus            ]       };

    key <AD01> {        [         q,    Q               ]       };
    key <AD02> {        [         w,    W               ]       };
    key <AD03> {        [         e,    E               ]       };
    key <AD04> {        [         r,    R               ]       };
    key <AD05> {        [         t,    T               ]       };
    key <AD06> {        [         y,    Y               ]       };
    key <AD07> {        [         u,    U               ]       };
    key <AD08> {        [         i,    I               ]       };
    key <AD09> {        [         o,    O               ]       };
    key <AD10> {        [         p,    P               ]       };
    key <AD11> {        [ bracketleft,  braceleft       ]       };
    key <AD12> {        [ bracketright, braceright      ]       };

    key <AC01> {        [         a,    A               ]       };
    key <AC02> {        [         s,    S               ]       };
    key <AC03> {        [         d,    D               ]       };
    key <AC04> {        [         f,    F               ]       };
    key <AC05> {        [         g,    G               ]       };
    key <AC06> {        [         h,    H               ]       };
    key <AC07> {        [         j,    J               ]       };
    key <AC08> {        [         k,    K               ]       };
    key <AC09> {        [         l,    L               ]       };
    key <AC10> {        [ semicolon,    colon           ]       };
    key <AC11> {        [ apostrophe,   quotedbl        ]       };

    key <AB01> {        [         z,    Z               ]       };
    key <AB02> {        [         x,    X               ]       };
    key <AB03> {        [         c,    C               ]       };
    key <AB04> {        [         v,    V               ]       };
    key <AB05> {        [         b,    B               ]       };
    key <AB06> {        [         n,    N               ]       };
    key <AB07> {        [         m,    M               ]       };
    key <AB08> {        [     comma,    less            ]       };
    key <AB09> {        [    period,    greater         ]       };
    key <AB10> {        [     slash,    question        ]       };

    key <BKSL> {        [ backslash,         bar        ]       };
    // End alphanumeric section

    //hjkl
    //AltGr + hjkl
    key <AC06> {        [         h, H, Left            ]       };
    key <AC07> {        [         j, J, Down            ]       };
    key <AC08> {        [         k, K, Up              ]       };
    key <AC09> {        [         l, L, Right           ]       };
    //Super_L -> Alt Gr
    key <LWIN> { [ ISO_Level3_Shift ] };


};

Tôi hy vọng điều này sẽ giúp ai đó ngoài kia ...

Nếu bất cứ ai có một giải pháp tốt hơn, xin vui lòng cho tôi biết.

Chỉnh sửa: Đã thử nghiệm trên Fedora.


Tôi đã thực hiện phương pháp này cho mình, nhưng nó không hoạt động cho tất cả các ứng dụng! xevnói rõ ràng Leftvà nó hoạt động cho hầu hết các ứng dụng. Nhưng một số chương trình chỉ phản ứng với các phím mũi tên "thực", như trình soạn thảo văn bản siêu phàm và các chương trình khác.
Tarrasch

1
Hoạt động như mô tả trên Redhat 6.2. Đau cổ tay của tôi cảm ơn bạn!
BuckFillsPlatypus

Cảm ơn basic6, nó hoạt động trên Ubuntu sau các bước được mô tả dưới đây. Có một vấn đề trên Ubuntu (đã được thử nghiệm trên Ubuntu 14.04) rằng các tệp .xkm không được biên dịch lại và do đó, các thay đổi trong / usr / share / X11 / xkb /bols / * không có hiệu lực. Để cải thiện, hãy xóa tất cả các tệp * .xkm khỏi / var / lib / xkb và hệ thống khởi động lại. Sau đó, các tệp * .xkm sẽ được biên dịch lại. Để biết thêm thông tin xin vui lòng xem: ubuntuforums.org/showthread.php?t=1589744
MPtr

3

Tôi đã không thử điều này bản thân mình nhưng có vẻ như xkb có thể làm những gì bạn muốn http://en.wikipedia.org/wiki/X_keyboard_extension .

Tôi có một gói trong Ubuntu có tên là x11-xkb-utils nghe có vẻ hứa hẹn :)


xkb không thể hoạt động với phím Super làm công cụ sửa đổi. xkb chỉ hoạt động với (theo thứ tự) Unmodified, Shift, AltGr, Shift-AltGr. Công cụ sửa đổi cấp cao hơn cũng có thể được chỉ định (chẳng hạn như trong ví dụ CapsLock của Bill Casarin) nhưng chúng không xuất hiện trên bàn phím tiêu chuẩn. Ánh xạ Super tới một công cụ sửa đổi cao hơn sẽ loại bỏ nó khỏi chức năng như Super (như trong ví dụ của basic6).
dotancohen

3

Không cần sudo , xuất phát từ đây , được sửa đổi để làm cho nó hoạt động khi kết hợp với Alt.

tạo một filew nội dung sau:

! remove Caps Lock
clear lock
! remove Lock = Caps_Lock
! remove Shift = Caps_Lock
keycode 66 = NoSymbol NoSymbol
keycode 66 = ISO_Level3_Shift

keysym h = h H NoSymbol NoSymbol Left Left
keysym j = j J NoSymbol NoSymbol Down Down
keysym k = k K NoSymbol NoSymbol Up Up
keysym l = l L NoSymbol NoSymbol Right Right

! some sugar
keysym o = o O NoSymbol NoSymbol BackSpace NoSymbol
keysym i = i I NoSymbol NoSymbol Delete NoSymbol`

gọi

xmodmap file

Nó ánh xạ AltGrtới Capsthay vì Super, vì vậy bạn có thể đặt

keycode 66 = Super_L

(hoặc bất cứ điều gì xevmang lại cho bạn khi đánh Super)

Phần đường cung cấp backspace và Del như một nhiệm vụ đặc biệt cho i và o, bạn có thể bỏ qua phần đó hoặc xem nó như một phần thưởng hoặc động lực để tự mình mở rộng / điều chỉnh nó;)

PS: nếu thử nghiệm với nó, đặt lại ánh xạ "mặc định" bằng cách gọi

setxkbmap

Điều này không làm việc cho tôi, nhưng đã đưa tôi đi đúng hướng. Điều này hiệu quả với tôi: github.com/sblask/dotfiles/commit/ Kẻ
Sebastian Blask

2

Cuối cùng, có vẻ như tôi đã tìm thấy giải pháp hoạt động với tất cả các sửa đổi (Ctrl +, Shift +, Ctrl + Shift +) và Sublime Text 2.

Tất cả vinh quang thuộc về cấu hình đá quý này mà tôi tìm thấy gần đây http://www.spinics.net/lists/xorg/msg35931.html . Nó mô tả các mũi tên ijkl, nhưng nó có thể dễ dàng sửa đổi để điều hướng hjkl. Bạn cần cập nhật (các) tệp bố cục bàn phím / usr / share / X11 / xkb /bols / * (personaly, tôi sử dụng / usr / share / X11 / xkb /bols / typo, mà tôi đưa vào bố cục bàn phím của mình với Xkb tùy chọn "misc: typo", vì vậy nó hoạt động cho mọi bố cục bàn phím). Cấu hình giả định rằng khóa sửa đổi gửi ISO_Level3_Shift (có nhiều cách để liên kết Super hoặc Alt với ISO_Level3_Shift).

Các định nghĩa chính sẽ giống như (sử dụng NoSymbol nếu bạn đang sửa đổi ../symbols/typo):

key <AC07> {    
    type="MOD5_NAV",
    [NoSymbol, NoSymbol, Down, Down],   
    actions[Group1] = [NoAction(), NoAction(), RedirectKey(key=<DOWN>, clearmods=ISO_Level3_Shift)]
};

Ngoài ra, bạn cần chỉnh sửa / usr / share / X11 / type / basic và khai báo loại "MOD5_NAV":

type "MOD5_NAV" {
    modifiers = Shift+Mod5;
    map[None] = level1;
    map[Shift] = level2;
    map[Mod5] = level3;
    map[Mod5+Shift] = level3;
    level_name[Level1] = "Base";
    level_name[Level2] = "Caps";
    level_name[Level3] = "Arrows";
};

Đối với Sublime Text 2, giải pháp phức tạp và rắc rối hơn. Như đã đề cập ở trên, Sublime Text 2 đọc mã khóa trực tiếp từ thiết bị và do đó bỏ qua một số tính năng của Xkb (và thủ thuật xkb với mũi tên không có tác dụng). Có một dự án gần như bị bỏ hoang nhưng vẫn hoạt động, Gizmo Daemon http://gizmod.sourceforge.net/ . Sau một vài lần vật lộn và googling, tôi đã biên dịch thành công nó trên Debian Wheezy. Sau đó, tôi đã tạo tập lệnh gizmod này và đặt nó vào ~ / .gizmod / mô-đun.d / 010-PalViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS Trên Linux đôi khi tôi nhớ Bàn phímRemap4MacBook. Sự an toàn tuyệt vời này của phần mềm OS X có thể cho phép điều hướng như vậy (và rất nhiều thứ khác) chỉ với vài hộp kiểm.


1

Tôi là người dùng HHKB trên Debian / Ubuntu và giải pháp này hiệu quả với tôi.

sử dụng Left Ctrlđể khóa hoạt động.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Thêm mã này // End alphanumeric sectionvào trong khối cơ bản trong / usr / share / X11 / xkb /bols / us

//hjkl
//Ctrl + hjkl
key <AC06> {    [   h,  H,  Left    ]   };
key <AC07> {    [   j,  J,  Down    ]   };
key <AC08> {    [   k,  K,  Up      ]   };
key <AC09> {    [   l,  L,  Right   ]   };

Bây giờ, bạn sẽ có thể sử dụng trái, xuống, lên và chìa khóa đúng với Ctrl+ h, j, k, l.

Nhân tiện, nếu bạn đã sử dụng pentadactyl trên Firefox, bạn có thể thêm mã này vào ~ / .pentadactylrc

map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>


1

Cái này hoạt động với tôi trên Arch. Nó ánh xạ lại Caps + hjkl thành các phím mũi tên và Shift + Caps thành Caps.

Đặt những thứ sau vào ~/.Xmodmap:

! Remap caps lock to special modifier, but still allow shift+caps to 
toggle caps lock
clear lock
clear mod5
add lock = Mode_switch
keycode 66 = Mode_switch Caps_Lock NoSymbol NoSymbol
keycode 43 = h H Left Left
keycode 44 = j J Down Down
keycode 45 = k K Up Up
keycode 46 = l L Right Right

Khởi động lại hoặc thiết lập nó với xmodmap ~/.Xmodmap

Nếu bạn gặp lỗi như:

X Error of failed request:  BadValue (integer parameter out of range for operation)

Điều này có thể có nghĩa là bạn cần phải xóa một cái gì đó ngoài mod5(bất cứ điều gì hiện đang được đặt thành Mode_switch). Kiểm tra ánh xạ sửa đổi hiện tại của bạn với xmodmap.

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.