Mappatura di Super + hjkl sui tasti freccia sotto X


23

Sto cercando di mappare:

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

globalmente sotto X. L'idea è che non voglio lasciare la mia riga home che usi spesso i tasti freccia, quindi userò il modificatore Super + hjkl per emulare i tasti freccia sotto X. Esiste un modo per farlo ?

Una cosa che ho provato è xbindkeys + xte usando questa configurazione:

"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

ma sembra che ci sia un grande ritardo tra me premendo il tasto e notando qualsiasi risultato, e il più delle volte non succede nulla.

Esiste un modo più elegante di farlo che in realtà funziona senza ritardi?


2
Ho trovato questo fantastico per fare questo genere di cose: code.google.com/p/autokey
Tom Power

Cos'è il sistema operativo? Penso anche che potresti stare meglio usando Control-Super o una simile combinazione.
harrymc,

Risposte:


15

Capslock + HJKL ai tasti freccia

  1. Crea ~ / .Xmodmap e mettilo dentro:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Aggiungere Left, Down, Up, Rightcome terzo elemento alle h, j, k, l voci chiave /usr/share/X11/xkb/symbols/us(prima sezione):

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

Alternativa: Capslock come Control e Control_L + HJKL ai tasti freccia

Questa è la mia configurazione attuale. Ho decompresso Control_L come chiave di controllo e lo uso come modificatore speciale (ISO_Level3_Shift), che corrisponde alla terza voce nel /usr/share/X11/xkb/symbols/usfile per i mapping hjkl.

  1. Ho modificato la prima strofa di / usr / share / X11 / xkb / simboli / us come prima:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Quindi lo inserisco nel mio file ~ / .Xmodmap:

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

keycode 66è il maiuscolo e keycode 37viene lasciato il controllo

  1. eseguire xmodmap ~ / .Xmodmap

Con questa configurazione posso usare i tasti freccia con Control_L + hjkl e saltare le parole con Control_L + maiusc + hl. Facile!


1
Funziona anche su Arch Linux, ma non immediatamente dopo il comando xmodmap. Dopo il riavvio, funziona quasi perfettamente. Semplicemente non si può fare CTRL + MAIUSC + freccia con CTRL + MAIUSC + MAIUSC + hjkl, di solito per selezionare le parole. Qualche idea su come farlo?
Koss,

Hmm hai ragione, il meglio che potrei fare è aggiungere nuovamente Sinistra, Giù, Su, Destra in un'altra colonna. Ciò non consente di evidenziare, ma salterà le parole come al solito. Dovrò approfondire questo.
William Casarin,

Questo funziona abbastanza bene per me. L'unico problema che ho, non funziona in Chrome e questo è un fastidio.
Mood

Potrebbe essere necessario cancellare i file xkb memorizzati nella cache per rendere effettive /var/lib/xkb/*.xkmle modifiche /usr/share/X11/xkb/symbols/us.
solo

1
Funziona su Ubuntu 14.04. Ho dovuto creare xmodmap /home/alex/.Xmodmapun'applicazione di avvio e rimuovere tutti i file * .xkm da / var / lib / xkb. Avvertenza: ho eliminato una VM Ubuntu facendo questo ultimo passaggio e quindi la mia tastiera non funzionava più, quindi fai attenzione e hai pronto un backup :-) Shift + Control + Caps + hjkl per selezionare il testo funziona bene in Firefox e Thunderbird, ma in alcune applicazioni non funziona (Chrome ad esempio)
Alexander Rechsteiner,

8

Le modifiche sopra menzionate in / usr / share / X11 / xkb / simboli / us NON funzionano per me:
errore durante il caricamento della nuova descrizione della tastiera

Ma dopo aver esaminato molti howtos contraddittori, ho trovato una soluzione, che mappa il super tasto sinistro (tasto windows sinistro / Mod4) in combinazione con hjkl a sinistra, giù, su, destra. Questa è un'impostazione a livello di sistema.

Aggiungi questo blocco alla fine della prima sezione (subito prima };) del tuo / usr / share / X11 / xkb / simboli / 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!

La prima riga chiave associa AltGr + h a sinistra.
L'ultima riga della chiave fa sì che la super chiave sinistra si comporti come AltGr.
Ecco qui:

Super + h -> Sinistra
Super + j -> Giù
Super + k -> Su
Super + l -> Destra

Per applicare le nuove impostazioni, eseguire setxkbmap o riavviare il sistema.

Importante : questo ovviamente disabilita la super chiave, quindi se in realtà stai usando la tua super chiave per altri scopi (cioè spostando una finestra in un altro spazio di lavoro), non dovresti rimappare in questo modo.
Per usare Caps Lock invece di Super, cambia l'ultima riga di tasti con:

key <CAPS> { [ ISO_Level3_Shift ] };

Ecco la prima sezione completa del mio file di configurazione:

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


};

Spero che questo aiuti qualcuno là fuori ...

Se qualcuno ha una soluzione migliore, per favore fatemelo sapere.

Modifica: testato su Fedora.


Ho fatto questo approccio da solo, ma non funziona per tutte le applicazioni! xevdice chiaramente Lefte funziona per la maggior parte delle applicazioni. Ma alcuni programmi reagiscono solo ai tasti freccia "reali", come l' editor di testo sublime e altri.
Tarrasch,

1
Funziona come descritto su Redhat 6.2. I miei polsi doloranti grazie!
BuckFilledPlatypus,

Grazie basic6, funziona su Ubuntu dopo i passaggi descritti di seguito. C'è un problema su Ubuntu (testato su Ubuntu 14.04) che i file .xkm non vengono ricompilati e quindi le modifiche in / usr / share / X11 / xkb / simboli / * non hanno alcun effetto. Per migliorarlo, rimuovere tutti i file * .xkm da / var / lib / xkb e riavviare il sistema. Successivamente i file * .xkm verranno ricompilati. Per ulteriori informazioni, consultare: ubuntuforums.org/showthread.php?t=1589744
MPtr

3

Non ho provato questo da solo, ma sembra che xkb potrebbe fare quello che vuoi http://en.wikipedia.org/wiki/X_keyboard_extension .

Ho un pacchetto in Ubuntu chiamato x11-xkb-utils che sembra promettente :)


xkb non può funzionare con il tasto Super come modificatore. xkb funziona solo con (in ordine) Unmodified, Shift, AltGr, Shift-AltGr. Possono anche essere assegnati modificatori di livello superiore (come nell'esempio CapsLock di Bill Casarin) ma non vengono forniti con una tastiera standard. La mappatura di Super su un modificatore superiore ne rimuove il funzionamento come Super (come nell'esempio di basic6).
dotancohen,

3

Nessun sudo necessario, derivato da qui , modificato per farlo funzionare anche se combinato con Alt.

crea a filew il seguente contenuto:

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

invocare

xmodmap file

Si associa AltGral Capsposto di Super, per cui si potrebbe piuttosto set

keycode 66 = Super_L

(o watever xevti dà a colpire Super)

La parte Sugar dà backspace e Del come compito speciale per i e o, potresti ometterlo o vederlo come un bonus o una motivazione per espanderlo / adattarlo da solo;)

PS: se si sperimenta con esso, ripristinare il mapping "predefinito" richiamando

setxkbmap

Questo non ha funzionato per me, ma mi ha portato sulla strada giusta. Questo funziona per me: github.com/sblask/dotfiles/commit/…
Sebastian Blask

2

Alla fine sembra che ho trovato la soluzione che funziona con tutti i modificatori (Ctrl +, Maiusc +, Ctrl + Maiusc +) e Sublime Text 2.

Tutta la gloria va a questa configurazione gemma che ho trovato di recente http://www.spinics.net/lists/xorg/msg35931.html . Descrive le frecce ijkl, ma può essere facilmente modificato per la navigazione hjkl. Devi aggiornare i tuoi file di layout di tastiera / usr / share / X11 / xkb / simboli / * (personalmente, uso / usr / share / X11 / xkb / simboli / refuso, che includo nel mio layout di tastiera con Xkb opzione "misc: typo", quindi funziona con qualsiasi layout di tastiera). La configurazione presuppone che la chiave del modificatore invii ISO_Level3_Shift (ci sono molti modi per associare Super o Alt a ISO_Level3_Shift).

Le definizioni chiave dovrebbero apparire (usa NoSymbol se stai modificando ../symbols/typo):

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

Inoltre devi modificare / usr / share / X11 / types / basic e dichiarare il tipo "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";
};

Per quanto riguarda Sublime Text 2, la soluzione è più complicata e complicata. Come accennato in precedenza, Sublime Text 2 legge i codici chiave direttamente dal dispositivo e quindi ignora alcune funzionalità di Xkb (e il trucco xkb con le frecce non ha alcun effetto). C'è un progetto quasi abbandonato ma ancora funzionante, Gizmo Daemon http://gizmod.sourceforge.net/ . Dopo alcune lotte e googling l'ho compilato con successo sul mio Debian Wheezy. Quindi ho creato questo script gizmod e l'ho inserito in ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS Su Linux mi manca KeyboardRemap4MacBook a volte. Questa grande tranquillità del software OS X può consentire tale navigazione (e molte altre cose) con poche caselle di controllo.


1

Sono un utente HHKB su Debian / Ubuntu e questa soluzione funziona per me.

utilizzare Left Ctrlper il tasto attivo.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Aggiungi questo codice sotto // End alphanumeric sectionnel blocco di base in / usr / share / X11 / xkb / simboli / us

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

Ora, si dovrebbe essere in grado di utilizzare a sinistra, giù, su e con il tasto destro Ctrl+ h, j, k, l.

A proposito, se hai usato pentadactyl su Firefox, puoi aggiungere questo codice in ~ / .pentadactylrc

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


1

Questo funziona per me sull'Arch. Rimappa Maiusc + hjkl ai tasti freccia e Maiusc + Maiusc ai tasti maiuscoli.

Inserisci quanto segue ~/.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

Riavvia o imposta con xmodmap ~/.Xmodmap

Se ricevi un errore come:

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

Probabilmente significa che devi cancellare qualcosa di diverso da mod5(qualsiasi cosa sia attualmente impostata su Mode_switch). Controlla le tue attuali mappature dei modificatori con xmodmap.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.