Haverá muito a detalhes técnicos para esta solução. Sinta-se à vontade para pular para a seção layout file se não se importar com o problema, mas apenas com a solução.
xmodmap
Movendo para cima e para baixo via CAPS e Shift + CAPS funciona no meu sistema com o dado .Xmodmap
como esperado.
Você verifica se suas configurações estão realmente em efeito chamando
$ xmodmap -pk | grep ^\s*66
66 0xffe5 (Caps_Lock) 0x0000 (NoSymbol) 0xffe5 (Caps_Lock)
$ setxkbmap -layout us && xmodmap ~/.Xmodmap
$ xmodmap -pk | grep ^\s*66
66 0xff54 (Down) 0xff52 (Up)
o modificador LEVEL2
Existe outro problema (real) para a sua pergunta que vem a seguir:
O modificador LEVEL2 <SHIFT>
que é ativado pressionando o botão Shift está lá para marcar visualmente os caracteres em um editor de texto ao se mover pelas linhas com as teclas de seta. Se você atribuir <UP>
↑ ao segundo nível de <CAPS>
, o que você está efetivamente fazendo é pressionar Shift + ↑ . Você tem que desativar o modificador Shift apenas para esse cenário. Afaik você não pode fazer isso usando xmodmap.
redirecionando o modificador LEVEL2
A "maneira real" de modificar os principais mapas é com xkb . Eu encontrei a solução em uma antiga lista de discussão xorg . O LEVEL2 de Caps deve ser redirecionado para a chave ↑ ( <UP>
) (a tecla Up-Key tem apenas um nível). No X.org você pode desativar o modificador Shift durante o redirecionamento com a função interna RedirectKey(key=<UP>, clearmods=Shift)
. clearmods "libera" o modificador Shift antes que a chave seja realmente "pressionada".
arquivo de layout
A maneira mais simples de ativar o comportamento é criar um novo arquivo de layout:
/ usr / share / X11 / xkb / símbolos / capslockarrow
default partial xkb_symbols "basic" {
include "de(basic)"
include "shift(both_capslock_cancel)"
key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Down, NoSymbol ],
actions[Group1] = [ NoAction(), RedirectKey(key=<UP>, clearmods=Shift) ]
};
};
ativar o novo layout com
setxkbmap capslockarrow
Notas sobre o arquivo de layout
-
O novo arquivo de layout deriva de
de(basic)
. Esse é o layout do teclado alemão padrão . Você pode adicionar qualquer outro layout aqui, comous(basic)
ouus(euro)
. veja/usr/share/X11/xkb/symbols/
para ver o que é possível. O código de duas letras é o nome do arquivo e entre colchetes está a respectiva definiçãoxkb_symbols
do arquivo. -
Você não teria mais um modificador de tecla caps. Portanto, eu adicionei um tipo de substituição para Caps :
shift(both_capslock_cancel)
Pressionando ambos LSHIFT e RSHIFT juntos, você pode ativar CAPS Lock e você libera o Lock novamente com qualquer outro pressionamento de uma tecla Shift . -
Se alguém estiver se perguntando por que eu não usei uma nova definição de tipo para isso: eu simplesmente não consegui liberar o modificador Shift antes que a ação da Tecla Up fosse acionada. A liberação da tecla Shift deve ser possível explicitamente chamando
preserve[Shift] = None
em% spearatedxkb_types
. -
Como afirmado nos comentários abaixo, o Wayland também dependerá do XKB, mas não permitirá redirecionamentos.