Remapeando Caps Lock para controlar e escapar (não da maneira usual)

27

Eu sei como usar o xmodmap para remapear a tecla Caps Lock, para que ela atue como uma tecla Control ou como uma tecla Escape. Gostaria de combinar os dois recursos da seguinte maneira:

Quando pressiono e solto a tecla Caps Lock, ela envia Escape. Quando pressiono Caps lock e pressiono outra tecla (digamos A), ela envia Control-A.

Existe alguma combinação de xkb, xmodmap e algo mais que poderia fazer o Caps lock se comportar dessa maneira no X?

Estou usando o Ubuntu Precise em um Macbook Air 3,1.

user372737
fonte

Respostas:

-2

Você pode fazer o primeiro (mapeando Caps Lockpara Esc), mas não o segundo.

Explicação simples: Caps Lock não foi projetada para fazer algo quando pressionada.

Explicação elaborada: Existem muitos tipos de chaves. Dois deles são as teclas modificadoras e as teclas de bloqueio .

Caps Locké uma chave de bloqueio , enquanto as teclas, como Ctrl, Alt, e Shiftsão de modificação de Chaves .

É evidente pelos nomes deles que as teclas modificadoras modificam a função da (s) próxima (s) tecla (s) pressionada (s) e as teclas de bloqueio agem como uma chave de alternância para ativar ou desativar alguma função específica.

Agora, como Caps Lock é uma chave de bloqueio , você não pode fazer com que ela se comporte como uma chave modificadora sem mapeá-la para uma. Caps Lockpor si só não pode funcionar como uma chave modificadora .

verde
fonte
Obrigado por confirmar que o X não foi projetado para fazer o que eu quero. Se um guru do X quiser invadir algo para fazê-lo funcionar, entre em contato comigo.
usar o seguinte comando
4
Como resposta inaceitável abaixo, você certamente pode fazer a segunda parte com vários utilitários, como xcape ou At-Home-Modifier.
Sparhawk 01/08/19
34

Eu tenho essa configuração no meu Mac e tentei encontrar um caminho para o Ubuntu sem sorte.

Bem, agora está funcionando. Obrigada por me apontar para o xcape . O que eu fiz é realmente simples e direto.

  1. Em Preferências do sistema> Layout do teclado> Opções ...> Posição da tecla Ctrl, marquei 'Caps Lock as Ctrl'.

  2. xcape -e 'Control_L = Escape'

Feito, o Caps Lock funciona como Ctrl quando usado como um modificador, e como Esc quando pressionado sozinho (há um pequeno atraso de algumas centenas de milissegundos, conforme observado no arquivo README do xcape, por isso ainda não é tão ideal quanto a solução Mac que usa KeyRemap4MacBook.)

Vic Goldfeld
fonte
4
Eu costumava gnome-tweak-toolmapear Caps Lockpara, Ctrlpois não há Keyboard layoutno System SettingsUbuntu 14.04. Então xcape -e 'Control_L=Escape'não funcionou, mas depois de usar xcape -dEu descobri que Caps Lockgera código de acesso 66 e remapeada-lo respectivamente: xcape -e '#66=Escape'.
Sergiy Belozorov
3
De acordo com este post do blog , é possível fazer isso apenas com o xcape: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Louis Simoneau
Isso deve realmente ter sido a resposta aceite @ user372737
Assaf Lavie
@ LouisSimoneau isso isso mil vezes isso.
Spencer Boucher
1
Algum progresso com o problema de atraso?
Toothrot
6

Também estou procurando por isso. Há uma semana, encontrei uma solução parcial usando xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Obviamente, isso não está funcionando perfeitamente; ele envia efetivamente Escape e Ctrl ao mesmo tempo quando pressiono CapsLock, mas fiquei feliz com isso por um tempo.

Finalmente encontrei este pequeno utilitário https://github.com/alols/xcape . Então agora eu posso simplesmente remapear o CapsLock para Ctrl e deixar o xcape fazer seu trabalho.

tungd
fonte
Outra opção é o modificador doméstico. Não está em desenvolvimento ativo e difere um pouco do xcape instalando na raiz. No entanto, ele é acionado através do xorg.conf e, portanto, pode atuar apenas em teclados específicos, enquanto usa outros teclados simultaneamente.
Sparhawk 01/08/19
4

EDIT: Corrigido isso para a maioria dos gerenciadores de exibição inteligentes (mais recentes).

Pelos comentários de Louis e Sergiy, eu vim com esta solução que está funcionando para mim no Ubuntu 16.04 (Xenial) com LightDM e Unity.

Coloquei a seguinte linha de código no meu .xprofilearquivo no meu diretório pessoal.

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

O trailing & coloca o comando xcape em segundo plano para que não bloqueie sua sessão. O setxkbmap faz sua alteração imediatamente.

Sergiy:

Eu usei o gnome-tweak-tool para mapear Caps Lock para Ctrl, pois não há layout de teclado nas Configurações do sistema no Ubuntu 14.04. O xcape -e 'Control_L = Escape' não funcionou, mas depois de usar o xcape -d, descobri que o Caps Lock gera o código de chave 66 e o ​​remapeou, respectivamente: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov 4 / set / 14 às 10:08

Louis:

De acordo com esta postagem do blog, é possível fazer isso apenas com o xcape: setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape; Control_L = O que você precisa saber é o seguinte: `` Escape; Control_R = Escape '' - Louis Simoneau

dragon788
fonte
3

Instalar xcape

sudo apt-get install xcape

Adicione as duas linhas no seu ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

Observe a parte -t 100; se você não a definir, poderá notar um atraso no Esc se usar o vim.

Searene
fonte
sudo apt-get install xcape(typo)
David Shaked
1

Criei uma ferramenta em C especialmente para esse fim, que supera muitos dos problemas da solução xcape / xmodmap :

pepper_chico
fonte
Existe alguma maneira de desativar a "troca" de Esc para Caps, eu prefiro não ter um Caps e manter o antigo e o novo Esc se comportando como Escape.
dragon788
Obrigado, vou ter que colocar um link para compilar isso automaticamente nos meus arquivos de ponto. Também posso publicar o README.md como no Ubuntu 16.04, foi necessário o libudev-dev e o libevdev-dev para poder compilar.
dragon788
@ dragon788 vem para Arch (você pode até tentar Antergos). Eu mudei do Ubuntu anos atrás e nunca vou voltar, é muito melhor.
pepper_chico