Mapeando Super + hjkl para as teclas de seta sob X

18

Estou tentando mapear:

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

globalmente em X. A idéia é que eu não quero sair da minha linha inicial que, muitas vezes, use as teclas de seta, então usarei o modificador Super + hjkl para emular as teclas de seta abaixo de X. Existe alguma maneira? fazer isso?

Uma coisa que eu tentei é xbindkeys + xte usando esta configuração:

"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

mas parece haver um grande atraso entre eu pressionar a tecla e perceber qualquer resultado, e na maioria das vezes nada acontece.

Existe uma maneira mais elegante de fazer isso que funciona sem atraso?

    
por William Casarin 15.01.2010 / 17:38

8 respostas

13

Capslock + HJKL para as teclas de seta

  1. Crie ~ / .Xmodmap e coloque isso dentro:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Adicione Left , Down , Up , Right como um terceiro item às entradas principais h, j, k, l em /usr/share/X11/xkb/symbols/us (a primeira seção):

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

Alternativa: Capslock como Control e Control_L + HJKL para as teclas de seta

Esta é a minha configuração atual. Eu desmapquei Control_L como uma chave de controle e usá-lo como um modificador especial (ISO_Level3_Shift), que corresponde à terceira entrada em o arquivo /usr/share/X11/xkb/symbols/us para os mapeamentos hjkl.

  1. Eu modifiquei a primeira estrofe 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. Depois coloco isso no meu arquivo ~ / .Xmodmap:

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

keycode 66 é capslock e keycode 37 é deixado no controle

  1. execute o xmodmap ~ / .Xmodmap

Com esta configuração eu posso usar as teclas de setas com Control_L + hjkl, bem como pular sobre palavras com Control_L + caps + hl. Fácil!

    
por 22.02.2010 / 14:24
8

As mudanças acima mencionadas em / usr / share / X11 / xkb / símbolos / us NÃO funcionam para mim:
Erro ao carregar a nova descrição do teclado

Mas depois de examinar muitos howts contraditórios, descobri uma solução que mapeia a super-tecla esquerda (tecla esquerda do windows / Mod4) em combinação com hjkl para Esquerda, Baixo, Cima, Direita. Esta é uma configuração de todo o sistema.

Adicione este bloco ao final da primeira seção (antes de }; ) do seu / usr / share / X11 / xkb / símbolos / 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!

A primeira linha chave mapeia AltGr + h para a esquerda.
A última linha chave faz a super-chave esquerda se comportar como AltGr.
Aqui vai:

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

Para aplicar as novas configurações, execute o setxkbmap ou reinicie o sistema.

Importante : Isso obviamente desabilita a super-chave, então se você está realmente usando sua super-chave para outros propósitos (por exemplo, movendo uma janela para outra área de trabalho), você não deve remapear assim

Para usar Caps Lock em vez de Super, altere a última linha de chave com:

key <CAPS> { [ ISO_Level3_Shift ] };

Aqui está a primeira seção completa do meu arquivo de configuração:

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 isso ajude alguém de fora ...

Se alguém tiver uma solução melhor, informe-nos.

Editar: testado no Fedora.

    
por 02.02.2012 / 20:54
3

Eu não tentei fazer isso sozinho, mas parece que o xkb pode fazer o que você quer link .

Eu tenho um pacote no Ubuntu chamado x11-xkb-utils que parece promissor:)

    
por 15.01.2010 / 21:02
3

Não é necessário sudo , derivado de aqui , modificado para fazê-lo funcionar também quando combinado com Alt .

crie um file w do seguinte conteúdo:

! 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

Ele mapeia AltGr para Caps ao invés de Super , então você pode preferir definir

keycode 66 = Super_L

(ou% de% a xev dá a você a opção Super )

A parte de açúcar dá backspace e Del como uma designação especial para i e o, você pode omiti-lo ou vê-lo como um bônus ou motivação para expandir / ajustar sozinho;)

PS: se experimentar, redefina o mapeamento "padrão" invocando

setxkbmap
    
por 14.05.2016 / 13:50
2

Por fim, parece que encontrei a solução que funciona com todos os modificadores (Ctrl +, Shift +, Ctrl + Shift +) e Sublime Text 2.

Toda a glória vai para essa configuração de gem que encontrei recentemente link . Ele descreve as setas ijkl, mas pode ser facilmente modificado para navegação hjkl. Você precisa atualizar o (s) arquivo (s) de layout do teclado / usr / share / X11 / xkb / symbols / * (pessoalmente, eu uso / usr / share / X11 / xkb / símbolos / typo, que incluo no layout do teclado com Xkb opção "misc: typo", por isso funciona para qualquer layout de teclado). A configuração assume que a tecla modificadora envia ISO_Level3_Shift (há muitas maneiras de vincular Super ou Alt a ISO_Level3_Shift).

As definições das chaves devem ser semelhantes (use NoSymbol se você estiver modificando ../ symbols / typo):

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

Você também precisa editar / usr / share / X11 / types / basic e declarar o 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";
};

Quanto ao Sublime Text 2, a solução é mais complicada e agressiva. Como mencionado acima, o Sublime Text 2 lê os códigos de teclas diretamente do dispositivo e, portanto, ignora alguns recursos do Xkb (e o truque do xkb com as setas não tem efeito). Existe um projeto quase abandonado, mas ainda funcionando, o link do Gizmo Daemon. Depois de algumas dificuldades e googling eu consegui compilá-lo com sucesso no Debian Wheezy. Então eu criei este script gizmod e o coloquei no link ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py

P.S. No Linux eu sinto falta do KeyboardRemap4MacBook algumas vezes. Essa grande paz do software OS X pode permitir essa navegação (e muitas outras coisas) com apenas algumas caixas de seleção.

    
por 24.12.2012 / 12:03
1

Encontrei autokey e é melhor para o mapeamento.

Eu acredito que o link chave de ligação - Emule o teclado no laptop - Pergunte ao Ubuntu pode ajudá-lo .

    
por 12.04.2013 / 10:00
0

Eu sou um usuário do HHKB no Debian / Ubuntu e esta solução funciona para mim.

use Ctrl à esquerda para a tecla ativa.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Adicione esse código em // End alphanumeric section no bloco básico em / 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   ]   };

Agora, você deve usar as teclas left, down, up e right com Ctrl + h , j , k , l .

A propósito, se você usou pentadactyl no Firefox, você pode adicionar este código em ~ / .pentadactylrc

map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>
    
por 08.03.2013 / 07:58
0

Este aqui funciona para mim no Arch. Ele remapeia Caps + hjkl para as teclas de seta e Shift + Caps para Caps.

Coloque o seguinte em ~/.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

Reinicie ou defina-o com xmodmap ~/.Xmodmap

Se você receber um erro como:

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

Isso provavelmente significa que você precisa limpar algo diferente de mod5 (o que estiver atualmente definido como Mode_switch ). Verifique seus mapeamentos de modificadores atuais com xmodmap .

    
por 24.01.2018 / 03:38