Desative Caps Lock quando Escape for pressionado

10

Existe alguma maneira de desativar CapsLocksempre que Escé pressionado. Sim, eu uso o VIM! Na verdade, tenho um layout de teclado all-caps alternativo, Ctrl-6mas acho complicado e prefere que o sistema operacional desative o CapsLock sempre que Escfor pressionado. Além disso, eu costumo fazer SSH em outros servidores por algumas horas, por isso estou no VIM de estoque lá.

Note que eu já troquei as teclas CapsLocke Esc. No entanto, quando a Esctecla é pressionada (que está rotulada CapsLockno teclado e fica ao lado A), eu preciso que ela execute as teclas Escapee Disable-CapsLock-If-It-Is-Enabled.

Isso está no Kubuntu 12.10. Obrigado.

dotancohen
fonte
Você precisa adicionar essa funcionalidade apenas para vimou a área de trabalho completa?
mtk
Eu gostaria que fosse um recurso da área de trabalho.
dotancohen

Respostas:

5

No X11 (no console eu não sei), você pode fazer isso redefinindo o comportamento da tecla Escape. Eu olhei para a definição "shift (break_caps)" para ver como ele funciona e a adaptei.

Veja esta resposta no xkb para obter mais detalhes sobre como / onde colocar os arquivos modificados localmente e carregá-los.

E para fazer o que você deseja, você precisa no arquivo de símbolos locais (por exemplo ~/.xkb/symbols/mysymbols:) uma seção como esta:

partial modifier_keys
xkb_symbols "esc_breaks_caps" {
    key <ESC> {
        type = "ALPHABETIC",
        actions [Group1] = [
            SetMods(modifiers=none),
            SetMods(modifiers=Lock,clearLocks)
        ]
    };
};

e no arquivo de mapa de teclas local (por exemplo:; ~/.xkb/keymap/mykbdvocê pode criá-lo com setxkbmap -print > ~/.xkb/keymap/mykbd) altere a xkb_symbolslinha a ser adicionada +mysymbols(esc_breaks_caps).

Agora você pode carregá-lo com: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY e pressionar Escirá remover o estado CapsLock (na verdade, o efeito acontece no lançamento do Esc; acho que apenas as teclas modificadoras têm efeito imediato; outras, o efeito é após o lançamento.)

Ah, se você também quiser trocar as teclas Escape e CapsLock; então use isso (e você coloca "+ mysymbols (esc_swap_and_breaks_caps)" no seu arquivo mykbd):

partial modifier_keys
xkb_symbols "esc_swap_and_breaks_caps" {
    replace key <CAPS> {
        type = "ALPHABETIC",
        symbols = [ Escape, Escape ],
        actions [Group1] = [
            SetMods(modifiers=none),
            SetMods(modifiers=Lock,clearLocks)
        ]
    };
    replace key <ESC> { [ CapsLock, CapsLock ] };
};

observe que as chaves físicas são <CAPS>e <ESC>; <CAPS>(tecla gravada CapsLockno teclado) envia Escape e <ESC>(tecla gravada Esc) envia CapsLock, com <CAPS>(enviando Escape) também desabilitando o estado do capslock

Pablo Saratxaga
fonte
1

Adicione estas linhas a ~/.Xmodmap:

clear lock
keycode 0x42 = Escape

Em seguida, digite o comando:

xmodmap ~/.Xmodmap

Sua Caps Lockchave agora está remapeada para a Escchave.

URL de referência .


Leia também este belo artigo sobre o Mapping CapsLock to Escape no Ubuntu , que parece ser um usuário unix.se :)

mtk
fonte
Obrigado. Eu já troquei CapsLock e Esc. No entanto, quando a tecla Esc é pressionado (que passa a ser rotulado CapsLock no teclado e fica ao lado A), eu preciso dele para executar tanto Fuga e Disable-CapsLock-Se-it-is-Ativado. Vou editar a pergunta para esclarecer. Obrigado.
dotancohen
Pensei que você precisasse do contrário. Um pouco confuso aqui. O que acontece ao pressionar Esce Capslocksapós essas alterações?
mtk
Atualmente: ao pressionar a ESCtecla, a CapsLockfunção alterna e, ao pressionar a CapsLocktecla, o ESCcomando é enviado (ou seja, a ESCtecla é remapeada para CapsLocke a CapsLocktecla remapeada para ESC). Meu objetivo com esta pergunta é fazer com que a CapsLocktecla seja executada tanto na ESCfunção (que atualmente é executada ) quanto desativada CapsLock, se e somente se a CapsLockfunção estiver ativada (ou seja, não alternar a CapsLockfunção, mas desativá-la se CapsLockestiver ativada).
dotancohen
1

Não tenho certeza se isso responde à sua pergunta, mas para mapear a Escfunção para a CapsLockchave, você pode usar o seguinte:

setxkbmap -option "caps:escape"

fonte