Memetakan Super + hjkl ke tombol panah di bawah X

23

Saya mencoba memetakan:

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

global di bawah X. Idenya adalah saya tidak ingin meninggalkan baris rumah saya yang sering menggunakan tombol panah, jadi saya akan menggunakan Super modifier + hjkl untuk meniru tombol panah di bawah X. Apakah ada cara untuk melakukan ini ?

Satu hal yang saya coba adalah xbindkeys + xte menggunakan konfigurasi ini:

"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

tetapi tampaknya ada penundaan besar antara saya menekan tombol dan memperhatikan hasil apa pun, dan sebagian besar waktu tidak ada yang terjadi sama sekali.

Apakah ada cara yang lebih elegan untuk melakukan ini yang benar-benar berfungsi tanpa penundaan?

William Casarin
sumber
2
Telah menemukan ini bagus untuk melakukan hal semacam ini: code.google.com/p/autokey
Tom Power
Apa itu OS? Saya juga berpikir Anda mungkin lebih baik menggunakan Control-Super atau kombo semacam itu.
harrymc

Jawaban:

15

Capslock + HJKL ke tombol panah

  1. Buat ~ / .Xmodmap dan letakkan ini di dalam:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Menambahkan Left, Down, Up, Rightsebagai item ketiga untuk h, j, k, entri kunci l di /usr/share/X11/xkb/symbols/us(bagian pertama):

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

Alternatif: Capslock sebagai Kontrol dan Kontrol_L + HJKL untuk tombol panah

Ini adalah pengaturan saya saat ini. Saya unmapped Control_L sebagai kunci kontrol dan menggunakannya sebagai pengubah khusus (ISO_Level3_Shift), yang sesuai dengan entri ketiga dalam /usr/share/X11/xkb/symbols/usfile untuk pemetaan hjkl.

  1. Saya memodifikasi bait pertama dari / usr / share / X11 / xkb / simbol / kita seperti sebelumnya:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Lalu saya meletakkan ini di file ~ / .Xmodmap saya:

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

keycode 66adalah capslock dan keycode 37kontrol kiri

  1. jalankan xmodmap ~ / .Xmodmap

Dengan pengaturan ini saya dapat menggunakan tombol panah dengan Control_L + hjkl serta melompati kata-kata dengan Control_L + caps + hl. Mudah!

William Casarin
sumber
1
Ini berfungsi di Arch Linux juga, tetapi tidak segera setelah perintah xmodmap. Setelah reboot, bekerja hampir dengan sempurna. Tidak bisa melakukan panah CTRL + SHIFT + dengan CTRL + SHIFT + CAPS + hjkl, biasanya untuk memilih kata. ada ide bagaimana mengerjakan ini?
koss
Hmm Anda benar, yang terbaik yang bisa saya lakukan adalah menambahkan Kiri, Bawah, Atas, Kanan lagi ke kolom lain. Ini tidak membuat penyorotan berfungsi tetapi akan melewati kata-kata seperti biasa. Saya harus melihat lebih dalam lagi.
William Casarin
Ini cukup berhasil bagi saya. Satu-satunya masalah yang saya miliki, tidak bekerja di Chrome dan itu adalah gangguan.
Mood
Anda mungkin perlu menghapus file-file xkb yang di-cache /var/lib/xkb/*.xkmagar perubahan /usr/share/X11/xkb/symbols/usditerapkan.
solo
1
Ini berfungsi di Ubuntu 14.04. Saya harus membuat xmodmap /home/alex/.Xmodmapaplikasi startup, dan menghapus semua file * .xkm dari / var / lib / xkb. Peringatan: Saya menghancurkan satu VM Ubuntu yang melakukan langkah terakhir ini dan kemudian keyboard saya tidak akan berfungsi sama sekali, jadi berhati-hatilah dan siapkan cadangan :-) Shift + Control + Caps + hjkl untuk memilih teks berfungsi dengan baik di Firefox dan Thunderbird, tetapi dalam beberapa aplikasi tidak (Chrome misalnya)
Alexander Rechsteiner
8

Perubahan yang disebutkan di atas dalam / usr / share / X11 / xkb / simbol / us TIDAK bekerja untuk saya:
Kesalahan memuat deskripsi keyboard baru

Tapi setelah melihat melalui banyak howtos yang bertentangan, saya telah menemukan solusi, yang memetakan tombol super kiri (tombol windows kiri / Mod4) dikombinasikan dengan hjkl ke Kiri, Bawah, Atas, Kanan. Ini adalah pengaturan seluruh sistem.

Tambahkan blok ini ke akhir bagian pertama (sebelum };) dari / usr / share / X11 / xkb / simbol / 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!

Baris kunci pertama memetakan AltGr + h ke Kiri.
Baris kunci terakhir membuat super key kiri berperilaku seperti AltGr.
Ini dia:

Super + h -> Kiri
Super + j -> Bawah
Super + k -> Atas
Super + l -> Kanan

Untuk menerapkan pengaturan baru, jalankan setxkbmap atau mulai ulang sistem Anda.

Penting : Ini jelas menonaktifkan kunci super, jadi jika Anda benar-benar menggunakan kunci super Anda untuk tujuan lain (yaitu memindahkan jendela ke ruang kerja lain), Anda tidak harus memetakannya kembali seperti ini.
Untuk menggunakan Caps Lock alih-alih Super, ubah baris kunci terakhir dengan:

key <CAPS> { [ ISO_Level3_Shift ] };

Inilah bagian pertama lengkap dari file konfigurasi saya:

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 ] };


};

Saya harap ini membantu seseorang di luar sana ...

Jika ada yang punya solusi yang lebih baik, beri tahu saya.

Sunting: Diuji pada Fedora.

basic6
sumber
Saya sudah melakukan pendekatan ini sendiri, tetapi tidak berfungsi untuk semua aplikasi! xevmengatakan dengan jelas Leftdan berfungsi untuk sebagian besar aplikasi. Tetapi beberapa program hanya bereaksi terhadap tombol panah "nyata", seperti editor teks luhur dan lainnya.
Tarrasch
1
Bekerja seperti yang dijelaskan pada Redhat 6.2. Pergelangan tangan saya yang sakit terima kasih!
BuckFilledPlatypus
Terima kasih basic6, ini berfungsi di Ubuntu setelah langkah-langkah yang dijelaskan di bawah ini. Ada masalah pada Ubuntu (diuji pada Ubuntu 14.04) bahwa file .xkm tidak dikompilasi ulang, dan dengan demikian perubahan dalam / usr / share / X11 / xkb / simbol / * tidak berpengaruh. Untuk memperbaikinya hapus semua file * .xkm dari / var / lib / xkb dan reboot sistem. Setelah itu file * .xkm akan dikompilasi ulang. Untuk informasi lebih lanjut, silakan lihat: ubuntuforums.org/showthread.php?t=1589744
MPtr
3

Saya belum mencoba ini sendiri tetapi sepertinya xkb mungkin melakukan apa yang Anda inginkan http://en.wikipedia.org/wiki/X_keyboard_extension .

Saya memiliki paket di Ubuntu yang disebut x11-xkb-utils yang kedengarannya menjanjikan :)

gacrux
sumber
xkb tidak dapat bekerja dengan kunci Super sebagai pengubah. xkb hanya berfungsi dengan (berurutan) Tidak diubah, Shift, AltGr, Shift-AltGr. Pengubah tingkat yang lebih tinggi juga dapat ditugaskan (seperti dalam contoh CapsLock Bill Casarin) tetapi mereka tidak datang pada keyboard standar. Memetakan Super ke pengubah yang lebih tinggi menghilangkannya berfungsi sebagai Super (seperti dalam contoh basic6).
dotancohen
3

Tidak perlu sudo , diturunkan dari sini , dimodifikasi untuk membuatnya bekerja juga ketika digabungkan dengan Alt.

buat filedengan konten berikut:

! 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`

memohon

xmodmap file

Ini peta AltGruntuk Capsbukan Super, sehingga Anda mungkin suka mengatur

keycode 66 = Super_L

(atau apa pun yang xevmemberi Anda memukul Super)

Bagian gula memberikan backspace dan Del sebagai penugasan khusus untuk i dan o, Anda mungkin mengabaikannya, atau melihatnya sebagai bonus atau motivasi untuk memperluas / menyesuaikannya sendiri;)

PS: jika coba-coba, reset pemetaan "default" dengan memohon

setxkbmap
Zeitvertreib
sumber
Ini tidak berhasil untuk saya, tetapi membuat saya di jalur yang benar. Ini berfungsi untuk saya: github.com/sblask/dotfiles/commit/…
Sebastian Blask
2

Akhirnya sepertinya saya menemukan solusi yang bekerja dengan semua pengubah (Ctrl +, Shift +, Ctrl + Shift +) dan Sublime Text 2.

Semua kemuliaan pergi ke konfigurasi permata ini yang saya temukan baru-baru ini http://www.spinics.net/lists/xorg/msg35931.html . Ini menjelaskan panah ijkl, tetapi dapat dengan mudah dimodifikasi untuk navigasi hjkl. Anda perlu memperbarui file tata letak keyboard Anda / usr / share / X11 / xkb / simbol / * (pribadi, saya menggunakan / usr / share / X11 / xkb / simbol / kesalahan ketik, yang saya sertakan ke tata letak keyboard saya dengan Xkb opsi "misc: typo", sehingga berfungsi untuk semua tata letak keyboard). Konfigurasi mengasumsikan bahwa kunci pengubah mengirim ISO_Level3_Shift (ada banyak cara bagaimana mengikat Super atau Alt ke ISO_Level3_Shift).

Definisi kunci akan terlihat seperti (gunakan NoSymbol jika Anda memodifikasi ../symbols/typo):

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

Anda juga perlu mengedit / usr / share / X11 / types / basic dan menyatakan tipe "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";
};

Sedangkan untuk Sublime Text 2 solusinya lebih rumit dan retas. Seperti disebutkan di atas, Sublime Text 2 membaca kode kunci langsung dari perangkat dan mengabaikan beberapa fitur Xkb (dan trik xkb dengan panah tidak berpengaruh). Ada proyek yang hampir ditinggalkan tetapi masih berfungsi, Gizmo Daemon http://gizmod.sourceforge.net/ . Setelah beberapa kesulitan dan googling saya berhasil mengompilasinya di Debian Wheezy saya. Kemudian saya membuat skrip gizmod ini dan meletakkannya di ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS Di Linux kadang-kadang saya merindukan KeyboardRemap4MacBook. Kedamaian luar biasa dari perangkat lunak OS X ini dapat mengaktifkan navigasi semacam itu (dan banyak hal lainnya) hanya dengan beberapa kotak centang.

sgtpep
sumber
1

Saya adalah pengguna HHKB di Debian / Ubuntu dan solusi ini berfungsi untuk saya.

gunakan Left Ctrluntuk tombol aktif.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Tambahkan kode ini // End alphanumeric sectiondi bawah di blok dasar di / usr / share / X11 / xkb / simbol / us

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

Sekarang, Anda harus dapat menggunakan kiri, bawah, atas dan tombol kanan dengan Ctrl+ h, j, k, l.

Omong-omong, jika Anda telah menggunakan pentadactyl di Firefox, Anda dapat menambahkan kode ini di ~ / .pentadactylrc

map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>
Chu-Saing Lai
sumber
1

Yang ini bekerja untuk saya di Arch. Memetakan kembali Caps + hjkl ke tombol panah, dan Shift + Caps ke Caps.

Masukkan yang berikut ini ~/.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

Mulai ulang atau atur dengan xmodmap ~/.Xmodmap

Jika Anda mendapatkan kesalahan seperti:

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

Ini mungkin berarti bahwa Anda perlu menghapus sesuatu selain mod5(apa pun yang saat ini diatur ke Mode_switch). Periksa pemetaan modifier Anda saat ini dengan xmodmap.

Huon Imberger
sumber