como registrar uma tecla de atalho para digitar um diacrítico no icewm?

como registrar uma tecla de atalho para digitar um diacrítico no icewm?

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 setxkbmapor xmodmapparece 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 --clearmodifiersfaz 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/

informação relacionada