Validate ~ / .XCompose

4

Estou trabalhando na criação de minhas próprias seqüências de teclas de composição em ~/.XCompose . Como eu adiciono mais e mais sequências, ocasionalmente eu faço erros de digitação ou uso a mesma seqüência para diferentes símbolos.

Exemplos:

Typo / códigos inexistentes

<Multi_key> <non-existent-keysym> : other-non-existent-keysym

Colisão total

<Multi_key> <a> <b> : x      # overrule by 2nd rule
<Multi_key> <a> <b> : y

Colisões com prefixo

<Multi_key> <a> <b> <c> : y 
<Multi_key> <a> <b> : x      # overruled by 1st rule

Pergunta

Existe um comando que valida meu arquivo ~/.XCompose . O requisito mínimo é uma resposta binária: Ou » o seu XCompose está livre de erros « ou » o seu XCompose contém erros «. No caso de haver erros, uma mensagem de erro útil como " colisão para o prefixo de seqüência de regras " seria bem-vinda.

O que eu tentei

Eu criei ~/.XCompose contendo todos os erros acima e abri um editor de texto. O editor de texto não mostra erros (no console). Sequências corretas e não anuladas funcionam, todas as outras sequências são ignoradas.

Eu li man 5 XCompose . Na documentação em si, não achei nada útil. Eu olhei as referências no final de man 5 XCompose . Apenas mkcomposecache(1) parece promissor (a julgar pela página de manual pesquisada ), mas parece estar faltando no meu sistema (Linux Mint 18.3). Nem man -k mkcomposecache nem apt search mkcomposecache encontram nada.

Editar: Como @quixotic sugeriu, eu compilei mkcomposecache de as fontes a> e executou, mas seu status de saídas é 1 , não importa qual arquivo eu escolha (com ou sem erros). Não há nenhuma mensagem de erro. Nenhum cache é gerado. Exemplo de como eu chamo o programa:

$ mkcomposecache en_US.UTF-8 /usr/share/X11/locale/en_US.UTF-8/Compose /tmp/
* XOpenDisplay: Success
$ echo $?
1

O arquivo /usr/share/X11/locale/en_US.UTF-8/Compose é o arquivo original do Ubuntu e deve estar livre de erros. Eu acho que há uma razão pela qual não é empacotado nos repositórios Ubuntu e Arch Linux.

Eu duvido que mkcomposecache é o que eu preciso, mesmo que funcione.

    
por Socowi 06.01.2018 / 15:15

1 resposta

1

Um pouco rudimentar, mas você pode simplesmente hackear algo rapidamente usando matrizes associativas, com, e. awk :

Para um arquivo de entrada como

<Multi_key> <a> <t> : y
<Multi_key> <a> <g> : y
<Multi_key> <a> <b> : x
<Multi_key> <a> <b> : y
<Multi_key> <a> <x> <c> : y 
<Multi_key> <a> <x> : x
<Multi_key> <a> <g> : Q
<Multi_key> <a> <n> : y

este comando

awk '!d[$2][$3]{d[$2][$3]=1;next} {print $0 " PROBLEM!"}' myFile

irá produzir

<Multi_key> <a> <b> : y PROBLEM!
<Multi_key> <a> <x> : x PROBLEM!
<Multi_key> <a> <g> : Q PROBLEM!

Para ver também a linha que está em conflito com:

awk 'c=d[$2][$3]{print $0 " COLLISION: " c;next} {d[$2][$3]=$0}' myFile

Resultado:

<Multi_key> <a> <b> : y COLLISION: <Multi_key> <a> <b> : x
<Multi_key> <a> <x> : x COLLISION: <Multi_key> <a> <x> <c> : y
<Multi_key> <a> <g> : Q COLLISION: <Multi_key> <a> <g> : y
    
por 12.01.2018 / 14:18