Asignación de Super + hjkl a las teclas de flecha debajo de X

23

Estoy tratando de mapear:

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

globalmente debajo de X. La idea es que no quiero dejar mi fila de inicio tan a menudo para usar las teclas de flecha, así que usaré el Super modificador + hjkl para emular las teclas de flecha debajo de X. ¿Hay alguna manera de hacer esto? ?

Una cosa que he probado es xbindkeys + xte usando esta configuración:

"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

pero parece que hay una gran demora entre presionar la tecla y notar cualquier resultado, y la mayoría de las veces no sucede nada.

¿Existe una forma más elegante de hacer esto que realmente funcione sin demora?

William Casarin
fuente
2
He encontrado que esto es genial para hacer este tipo de cosas: code.google.com/p/autokey
Tom Power
¿Qué es el sistema operativo? También creo que podría ser mejor usar Control-Super o algún combo similar.
harrymc

Respuestas:

15

Capslock + HJKL a las teclas de flecha

  1. Crea ~ / .Xmodmap y pon esto dentro:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Añadir Left, Down, Up, Rightcomo un tercer elemento a los h, j, k, l entradas clave en /usr/share/X11/xkb/symbols/us(la primera sección):

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

Alternativa: Capslock como Control y Control_L + HJKL a las teclas de flecha

Esta es mi configuración actual. Desmapeé Control_L como una tecla de control y lo uso como un modificador especial (ISO_Level3_Shift), que corresponde a la tercera entrada en el /usr/share/X11/xkb/symbols/usarchivo para las asignaciones hjkl.

  1. Modifiqué la primera estrofa de / usr / share / X11 / xkb / symbols / us como antes:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Luego puse esto en mi archivo ~ / .Xmodmap:

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

keycode 66es el bloqueo de mayúsculas y keycode 37queda el control

  1. ejecutar xmodmap ~ / .Xmodmap

Con esta configuración, puedo usar las teclas de flechas con Control_L + hjkl, así como saltar palabras con Control_L + mayúsculas + hl. ¡Fácil!

William Casarin
fuente
1
Esto también funciona en Arch Linux, pero no inmediatamente después del comando xmodmap. Después de reiniciar, funciona casi a la perfección. Simplemente no puedo hacer CTRL + MAYÚS + flecha con CTRL + MAYÚS + MAYÚSCULAS + hjkl, generalmente para seleccionar palabras. ¿Alguna idea de cómo hacer esto?
koss
Hmm tienes razón, lo mejor que puedo hacer es agregar Izquierda, Abajo, Arriba, Derecha nuevamente en otra columna. Esto no hace que el resaltado funcione, pero saltará palabras como de costumbre. Tendré que investigar esto más.
William Casarin
Esto funciona bastante bien para mí. El único problema que tengo es que no funciona en Chrome y eso es una molestia.
Humor el
Es posible que deba borrar los archivos xkb en caché /var/lib/xkb/*.xkmpara que los cambios /usr/share/X11/xkb/symbols/ussurtan efecto.
solo el
1
Esto funciona en Ubuntu 14.04. Tuve que hacer xmodmap /home/alex/.Xmodmapuna aplicación de inicio y eliminar todos los archivos * .xkm de / var / lib / xkb. Advertencia: eliminé una máquina virtual Ubuntu haciendo este último paso y luego mi teclado ya no funcionaría, así que tenga cuidado y tenga una copia de seguridad lista :-) Shift + Control + Caps + hjkl para seleccionar texto funciona bien en Firefox y Thunderbird, pero en algunas aplicaciones no lo hace (Chrome, por ejemplo)
Alexander Rechsteiner
8

Los cambios mencionados anteriormente en / usr / share / X11 / xkb / symbols / us NO funcionan para mí:
Error al cargar la nueva descripción del teclado

Pero después de ver muchos procedimientos contradictorios, se me ocurrió una solución, que asigna la súper tecla izquierda (tecla izquierda de Windows / Mod4) en combinación con hjkl a izquierda, abajo, arriba, derecha. Esta es una configuración de todo el sistema.

Agregue este bloque al final de la primera sección (justo antes };) de su / usr / share / X11 / xkb / symbols / 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 primera línea clave asigna AltGr + h a la izquierda.
La última línea de tecla hace que la súper tecla izquierda se comporte como AltGr.
Aqui tienes:

Super + h -> Izquierda
Super + j -> Abajo
Super + k -> Arriba
Super + l -> Derecha

Para aplicar la nueva configuración, ejecute setxkbmap o reinicie su sistema.

Importante : Obviamente, esto deshabilita la superclave, por lo que si realmente está usando su superclave para otros fines (es decir, mover una ventana a otro espacio de trabajo), no debe reasignarla de esta manera.
Para utilizar el bloqueo de mayúsculas en lugar de Super, cambie la última línea clave con:

key <CAPS> { [ ISO_Level3_Shift ] };

Aquí está la primera sección completa de mi archivo de configuración:

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


};

Espero que esto ayude a alguien por ahí ...

Si alguien tiene una mejor solución, hágamelo saber.

Editar: Probado en Fedora.

básico6
fuente
¡He hecho este enfoque yo mismo, pero no funciona para todas las aplicaciones! xevDice claramente Lefty funciona para la mayoría de las aplicaciones. Pero algunos programas solo reaccionan a las teclas de flecha "reales", como el editor de texto sublime y otros.
Tarrasch
1
Funciona como se describe en Redhat 6.2. ¡Mis doloridas muñecas gracias!
BuckFilledPlatypus
Gracias basic6, funciona en Ubuntu después de los pasos que se describen a continuación. Hay un problema en Ubuntu (probado en Ubuntu 14.04) que los archivos .xkm no se vuelven a compilar y, por lo tanto, los cambios en / usr / share / X11 / xkb / symbols / * no tienen ningún efecto. Para mejorarlo, elimine todos los archivos * .xkm de / var / lib / xkb y reinicie el sistema. Después de eso, los archivos * .xkm serán recompilados. Para obtener más información, eche un vistazo: ubuntuforums.org/showthread.php?t=1589744
MPtr
3

No lo he intentado yo mismo, pero parece que xkb podría hacer lo que quieras http://en.wikipedia.org/wiki/X_keyboard_extension .

Tengo un paquete en Ubuntu llamado x11-xkb-utils que suena prometedor :)

gacrux
fuente
xkb no puede funcionar con la tecla Super como modificador. xkb solo funciona con (en orden) Sin modificar, Shift, AltGr, Shift-AltGr. También se pueden asignar modificadores de nivel superior (como en el ejemplo CapsLock de Bill Casarin) pero no vienen en un teclado estándar. La asignación de Super a un modificador superior evita que funcione como Super (como en el ejemplo de basic6).
dotancohen
3

No se necesita sudo , derivado de aquí , modificado para que funcione también cuando se combina con Alt.

cree un filew el siguiente contenido:

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

invocar

xmodmap file

Se asigna AltGra en Capslugar de Super, por lo que puede configurar

keycode 66 = Super_L

(o lo que sea xevque te dé al golpear Super)

La parte de azúcar da retroceso y Del como una asignación especial para i y o, puede omitir eso, o verlo como una bonificación o motivación para expandirlo / ajustarlo usted mismo;)

PD: si experimenta con él, restablezca la asignación "predeterminada" invocando

setxkbmap
Zeitvertreib
fuente
Esto no funcionó para mí, pero me llevó por el buen camino. Esto funciona para mí: github.com/sblask/dotfiles/commit/…
Sebastian Blask
2

Por fin parece que encontré la solución que funciona con todos los modificadores (Ctrl +, Shift +, Ctrl + Shift +) y Sublime Text 2.

Toda la gloria va a esta configuración de gemas que encontré recientemente http://www.spinics.net/lists/xorg/msg35931.html . Describe las flechas ijkl, pero se puede modificar fácilmente para la navegación hjkl. Debe actualizar los archivos de distribución del teclado / usr / share / X11 / xkb / symbols / * (personalmente, uso / usr / share / X11 / xkb / symbols / typo, que incluyo en la distribución de mi teclado con Xkb opción "misc: typo", por lo que funciona para cualquier diseño de teclado). La configuración supone que la tecla modificadora envía ISO_Level3_Shift (hay muchas maneras de vincular Super o Alt a ISO_Level3_Shift).

Las definiciones clave deben verse así (use NoSymbol si está modificando ../symbols/typo):

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

También debe editar / usr / share / X11 / types / basic y declarar el 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";
};

En cuanto a Sublime Text 2, la solución es más difícil y hack. Como se mencionó anteriormente, Sublime Text 2 lee los códigos clave directamente desde el dispositivo y, por lo tanto, ignora algunas características de Xkb (y el truco xkb con flechas no tiene ningún efecto). Hay un proyecto casi abandonado pero que sigue funcionando, Gizmo Daemon http://gizmod.sourceforge.net/ . Después de algunas dificultades y buscar en Google, lo compilé con éxito en mi Debian Wheezy. Luego creé este script gizmod y lo coloqué en ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PD: En Linux, a veces extraño KeyboardRemap4MacBook. Esta gran tranquilidad del software OS X puede permitir dicha navegación (y muchas otras cosas) con solo unas pocas casillas de verificación.

sgtpep
fuente
1

Soy un usuario de HHKB en Debian / Ubuntu y esta solución funciona para mí.

utilizar Left Ctrlpara activar la clave.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Agregue este código // End alphanumeric sectionen el bloque básico en / usr / share / X11 / xkb / symbols / us

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

Ahora, usted debería ser capaz de utilizar la izquierda, abajo, arriba y la tecla derecha con Ctrl+ h, j, k, l.

Por cierto, si ha usado pentadactyl en Firefox, puede agregar este código en ~ / .pentadactylrc

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

Este me funciona en Arch. Se reasigna Caps + hjkl a las teclas de flecha y Shift + Caps a Caps.

Ponga lo siguiente en ~/.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

Reiniciar o configurarlo con xmodmap ~/.Xmodmap

Si obtiene un error como:

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

Probablemente significa que necesita borrar algo que no mod5sea ​​(lo que esté configurado actualmente Mode_switch). Verifique sus asignaciones de modificadores actuales con xmodmap.

Huon Imberger
fuente