Estou tentando configurar teclas de atalho para digitar diacríticos comuns. Posso fazer com que o xdotool digite o diacrítico em um terminal ou na barra de comando do icewm (ou mesmo no gmrun):
xdotool key Aacute
Mas os seguintes mapeamentos de teclado (no arquivo de chaves icewm) não funcionam:
key "Ctrl+Alt+a" xdotool key Aacute
key "Ctrl+Alt+a" xdotool --delay 1000 key Aacute
Em vez disso, vejo apenas o cursor piscar uma vez quando digito o atalho (se estiver no terminal ou no editor de texto), mas nada mais acontece. O seguinte mostra um pop-up, portanto o código-chave em si está correto:
key "Ctrl+Alt+a" zenity --info --text="shortcut works"
Alguém tem uma maneira de registrar a ligação da tecla, para que o diacrítico seja realmente digitado na aplicação ativa?
Responder1
Usar setxkbmap
or xmodmap
parece ser a coisa certa a fazer, mas FWIW e FTR descobri que o seguinte funcionou para mim depois que me deparei com esta questão. Espero que isso ajude outras pessoas que desejam usar o xdotool
.
Eu tenho o xdotool emular essas teclas, pois não as tenho no meu teclado. Observe o uso de &
para executar o comando em segundo plano para que o IceWM possa retornar do manuseio da tecla de atalho e evitar interferir no xdotool.
200 ms é o menor atraso que eu poderia usar e ainda assim funcionar de maneira confiável. Não tenho certeza se --clearmodifiers
faz sentido para o seu caso de uso ou não.
key "Ctrl+Up" xdotool sleep 0.2 key --clearmodifiers Page_Up &
key "Ctrl+Down" xdotool sleep 0.2 key --clearmodifiers Page_Down &
key "Ctrl+Shift+Up" xdotool sleep 0.2 key --clearmodifiers Home &
key "Ctrl+Shift+Down" xdotool sleep 0.2 key --clearmodifiers End &
Observe também que manter essas teclas pressionadas não resulta no comportamento de repetição esperado (porque as teclas de atalho do IceWM não são a melhor escolha para isso), mas isso é bom para meus propósitos.
Responder2
Não consegui fazer minha solução original funcionar, então alterei o mapeamento do teclado. O mapeamento de teclado padrão dos EUA não possui os diacríticos necessários, mas a versão internacional possui. Para experimentar:
setxkbmap -layout 'us(intl)'
Mas a versão internacional usa composição por padrão para determinadas chaves. Por exemplo, o caractere 'não responde mais imediatamente. Então, optei por criar meu próprio mapeamento de teclado baseado no teclado americano.
Criei um novo arquivo:/usr/share/X11/xkb/symbols/erik
partial default alphanumeric_keys
xkb_symbols "basic" {
include "us"
include "eurosign(5)"
key <AC01> { [ a, A, aacute, Aacute ] };
key <AD03> { [ e, E, eacute, Eacute ] };
key <AD08> { [ i, I, iacute, Iacute ] };
key <AD09> { [ o, O, oacute, Oacute ] };
key <AD07> { [ u, U, uacute, Uacute ] };
key <RALT> { type[Group1]="TWO_LEVEL", [ ISO_Level3_Shift, Multi_key ] };
modifier_map Mod5 { <RALT> };
};
para que o xkb receba as alterações:
sudo dpkg-reconfigure xkb-data
para tentar o mapeamento do teclado:
setxkbmap -layout erik
Agora alt_gr + [aeiou] deve digitar [áéíóú].
Tornei as alterações permanentes chamando o comando acima na inicialização usando o arquivo de inicialização icewm. Acho que deveria ser possível selecionar o layout usando o alternador de teclado de sua distribuição, mas não testei isso. Sinta-se à vontade para nomear o arquivo com outro nome, a menos que queira me dar a tremenda honra de nomear seu mapeamento de teclado com meu nome. Apenas certifique-se de evitar códigos de 2 letras, porque todos os mapeamentos de países padrão têm esse nome.
notas:
Você pode verificar os outros arquivos de mapeamento no diretório de símbolos para obter exemplos.
Alguns recursos para entender o formato do arquivo podem ser encontrados aqui:
https://www.x.org/wiki/XKB/