Super + hjkl'yi X altındaki ok tuşlarıyla eşleme


23

Harita oluşturmaya çalışıyorum:

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

Fikir, genellikle ok tuşlarını kullanmak için ana satırımı bırakmak istemiyorum, bu yüzden X altındaki ok tuşlarını taklit etmek için Süper değiştirici + hjkl kullanacağım. Bunu yapmanın herhangi bir yolu var mı? ?

Denediğim bir şey bu yapılandırmayı kullanarak xbindkeys + xte:

"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

ama aradaki tuşa basmak ve herhangi bir sonucu fark etmek arasında büyük bir gecikme var gibi görünüyor ve çoğu zaman hiçbir şey olmuyor.

Bunu yapmanın daha zarif bir yolu var mı?


2
Bunu böyle bir şey yapmak için harika buldum: code.google.com/p/autokey
Tom Power

İşletim sistemi nedir? Ayrıca Control-Super veya böyle bir kombo kullanmanın daha iyi olabileceğini düşünüyorum.
harrymc

Yanıtlar:


15

Capslock + HJKL - ok tuşları

  1. ~ / .Xmodmap oluşturun ve bunu içine koyun:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Ekle Left, Down, Up, Righth, j, k, l anahtar girişlerine üçüncü öğe olarak /usr/share/X11/xkb/symbols/us(birinci bölüm):

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  3. Çalıştırmak xmodmap ~/.Xmodmap

Alternatif: Ok tuşlarına Control ve Control_L + HJKL olarak Capslock

Bu benim şu anki kurulumum. Control_L'yi kontrol anahtarı olarak /usr/share/X11/xkb/symbols/useşleştirdim ve hjkl eşlemeleri için dosyadaki üçüncü girişe karşılık gelen özel bir değiştirici (ISO_Level3_Shift) olarak kullandım .

  1. / Usr / share / X11 / xkb / symbol / us'un ilk standardını daha önce olduğu gibi değiştirdim:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Sonra bunu ~ / .Xmodmap dosyama koydum:

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

keycode 66kapak kilidi ve keycode 37kontrol sol

  1. xmodmap ~ / .Xmodmap komutunu çalıştırın

Bu kurulum ile Control_L + hjkl ile ok tuşlarını kullanabilir ve Control_L + caps + hl ile kelimeleri atlayabilirim. Kolay!


1
Bu Arch Linux'ta da çalışır, ancak xmodmap komutundan hemen sonra değil. Yeniden başlattıktan sonra neredeyse mükemmel çalışır. CTRL + ÜST KARAKTER + ok tuşlarını CTRL + ÜST KARAKTER + CAPS + hjkl ile yapamazsınız, genellikle kelimeleri silmek için. Bunun nasıl yapılacağı hakkında bir fikrin var mı?
koss

Hmm haklısın, yapabileceğim en iyi şey yine Sol, Aşağı, Yukarı, Sağ'ı başka bir sütuna eklemektir. Bu, vurgulamayı işe yaramaz, ancak normal gibi kelimeleri atlar. Buna daha fazla bakmam gerekecek.
William Casarin

Bu benim için yeterince iyi çalışıyor. Sahip olduğum tek sorun, Chrome'da çalışmıyor ve bu bir sıkıntı.
Ruh Hali

/var/lib/xkb/*.xkmDeğişikliklerin /usr/share/X11/xkb/symbols/usetkili olması için önbelleğe alınmış xkb dosyalarını temizlemeniz gerekebilir .
solo

1
Bu Ubuntu 14.04 üzerinde çalışır. xmodmap /home/alex/.XmodmapBir başlangıç ​​uygulaması yapmak ve tüm * .xkm dosyalarını / var / lib / xkb formundan kaldırmak zorunda kaldım. Uyarı: Bu son adımı yapan bir Ubuntu VM'yi çöpe attım ve sonra klavyem artık işe yaramayacaktı, bu yüzden dikkatli olun ve yedeklemeye hazır olun :-) Shift + Control + Caps + hjkl metni seçmek için Firefox'ta iyi çalışıyor ve Thunderbird, ancak bazı uygulamalarda (örneğin Chrome)
Alexander Rechsteiner

8

/ Usr / share / X11 / xkb / symbol / us adresinde yukarıda belirtilen değişiklikler benim için çalışmıyor:
Yeni klavye açıklaması yüklenirken hata oluştu

Ancak birçok çelişkili howtos'a baktıktan sonra, sol süper anahtarı (sol windows tuşu / Mod4) hjkl ile Sol, Aşağı, Yukarı, Sağ ile birlikte eşleyen bir çözüm buldum. Bu sistem çapında bir ayardır.

Bu bloğu / usr / share / X11 / xkb / symbol / us öğenizin ilk bölümünün sonuna (hemen önce };) ekleyin :

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

İlk tuş satırı AltGr + h ile Sol arasını eşler.
Son tuş satırı, sol süper tuşun AltGr gibi davranmasını sağlar.
Hadi bakalım:

Süper + h -> Sol
Süper + j -> Aşağı
Süper + k -> Yukarı
Süper + l -> Sağ

Yeni ayarları uygulamak için setxkbmap komutunu çalıştırın veya sisteminizi yeniden başlatın.

Önemli : Bu açıkça süper anahtarı devre dışı bırakır, bu yüzden süper anahtarınızı başka amaçlar için (yani bir pencereyi başka bir çalışma alanına taşımak) kullanıyorsanız, bu şekilde yeniden eşleştirmemelisiniz.
Süper yerine Caps Lock'u kullanmak için son anahtar satırını şu şekilde değiştirin:

key <CAPS> { [ ISO_Level3_Shift ] };

İşte benim yapılandırma dosyamın ilk bölümü:

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


};

Umarım bu birisine yardım eder ...

Birinin daha iyi bir çözümü varsa, lütfen bana bildirin.

Düzenleme: Fedora'da test edildi.


Bu yaklaşımı kendim yaptım, ancak tüm uygulamalar için çalışmıyor! xevaçıkça söylüyor Leftve çoğu uygulama için çalışıyor. Ancak bazı programlar yalnızca yüce metin editörü ve diğerleri gibi "gerçek" ok tuşlarına tepki verir .
Tarrasch

1
Redhat 6.2'de anlatıldığı gibi çalışır. Boğaz bileklerim teşekkür ederim!
BuckFilledPlatypus

Teşekkür ederim basic6, aşağıda açıklanan adımlardan sonra Ubuntu üzerinde çalışır. Ubuntu'da (Ubuntu 14.04'te test edilmiştir), .xkm dosyalarının yeniden derlenmemesi sorunu vardır ve bu nedenle / usr / share / X11 / xkb / symbol / * 'deki değişikliklerin hiçbir etkisi yoktur. Geliştirmek için tüm * .xkm dosyalarını / var / lib / xkb dosyasından kaldırın ve sistemi yeniden başlatın. Bundan sonra * .xkm dosyaları yeniden derlenecektir. Daha fazla bilgi için lütfen bir göz atın: ubuntuforums.org/showthread.php?t=1589744
MPtr

3

Bunu kendim denemedim ama xkb http://en.wikipedia.org/wiki/X_keyboard_extension istediğini yapabilir gibi görünüyor .

Ubuntu'da x11-xkb-utils adında bir paket var.


xkb, Süper anahtarla değiştirici olarak çalışamaz. xkb yalnızca Değiştirilmemiş, Shift, AltGr, Shift-AltGr ile çalışır. Daha yüksek düzey değiştiriciler de atanabilir (Bill Casarin'in CapsLock örneğinde olduğu gibi), ancak standart bir klavyede gelmezler. Süper'yi daha yüksek bir değiştiriciye eşlemek, Süper olarak işlev görmesini engeller (basic6 örneğinde olduğu gibi).
dotancohen

3

Buradan türetilmiş sudo gerekmez, kombine edildiğinde de çalışması için modifiye edilmiştir Alt.

Bir oluşturmak fileaşağıdaki içeriği ağırlık:

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

çağırmak

xmodmap file

Bu haritalar AltGriçin Capsyerine SuperBunun yerine ayarlanmış olabilir, böylece

keycode 66 = Super_L

(ya da xevvurmak sana vurmak verir Super)

Şeker kısmı, backspace ve Del'i i ve o'ya özel bir görev olarak verir, bunu atlayabilir veya kendi başınıza genişletmek / ayarlamak için bir bonus veya motivasyon olarak görebilirsiniz;)

PS: bununla deneme yapıyorsanız, "varsayılan" eşlemeyi çağırarak sıfırlayın

setxkbmap

Bu benim için işe yaramadı, ama beni doğru yola soktu. Bu benim için çalışıyor: github.com/sblask/dotfiles/commit/…
Sebastian Blask

2

Sonunda tüm değiştiricilerle (Ctrl +, Shift +, Ctrl + Shift +) ve Sublime Text 2 ile çalışan çözümü bulduğum anlaşılıyor.

Tüm görkem, yakın zamanda bulduğum bu değerli taş yapılandırmasına gider http://www.spinics.net/lists/xorg/msg35931.html . İjkl oklarını açıklar, ancak hjkl navigasyonu için kolayca değiştirilebilir. Klavye düzeni dosyalarına Xkb ile eklediğim klavye düzeni dosyalarınızı / usr / share / X11 / xkb / symbol / * (şahsen, / usr / share / X11 / xkb / symbols / typo kullanmanız gerekiyor. seçeneği "misc: yazım hatası", böylece herhangi bir klavye düzeni için çalışır). Yapılandırma, değiştirici anahtarın ISO_Level3_Shift gönderdiğini varsayar (Süper veya Alt'ı ISO_Level3_Shift'e bağlamanın birçok yolu vardır).

Anahtar tanımlar şöyle görünmelidir (../symbols/typo değiştiriyorsanız NoSymbol kullanın):

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

Ayrıca / usr / share / X11 / types / basic komutunu düzenlemeniz ve "MOD5_NAV" türünü bildirmeniz gerekir:

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

Sublime Text 2'ye gelince, çözüm daha zor ve hileli. Yukarıda belirtildiği gibi, Sublime Text 2 anahtar kodlarını doğrudan cihazdan okur ve bu nedenle Xkb'nin bazı özelliklerini göz ardı eder (ve oklarla xkb numarasının hiçbir etkisi yoktur). Neredeyse terkedilmiş ancak halen çalışan bir proje var Gizmo Daemon http://gizmod.sourceforge.net/ . Biraz uğraştıktan ve googling yaptıktan sonra Debian Wheezy'imde başarıyla derledim. Sonra bu gizmod betiğini oluşturdum ve ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS Linux'ta bazen KeyboardRemap4MacBook'u özlüyorum. OS X yazılımının bu büyük huzuru, sadece birkaç onay kutusuyla bu navigasyonu (ve daha birçok şeyi) etkinleştirebilir.


1

Ben Debian / Ubuntu üzerinde bir HHKB kullanıcısıyım ve bu çözüm benim için çalışıyor.

kullanmak Left Ctrlaktif anahtar.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Bu kodu / usr / share / X11 / xkb / symbol / us// End alphanumeric section içindeki temel bloğa altına ekleyin.

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

Şimdi, yukarı, aşağı, sola ve sağ tuş kullanmak mümkün olmalıdır Ctrl+ h, j, k, l.

Eğer kullandıysanız arada, beşparmaklı Firefox'ta, bu kodu ekleyebilirsinizcreatives ~ / .pentadactylrc

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


1

Bu benim için Arch'da çalışıyor. Caps + hjkl'i ok tuşlarına ve Shift + Caps'den Caps'e hatırlar.

Aşağıdakileri yerleştirin ~/.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

İle yeniden başlatın veya ayarlayın xmodmap ~/.Xmodmap

Gibi bir hata alırsanız:

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

Muhtemelen mod5(şu anda ne ayarlıysa Mode_switch) dışında bir şeyi temizlemeniz gerektiği anlamına gelir . Mevcut değiştirici eşlemelerinizi ile kontrol edin xmodmap.

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.