Como posso listar todos os layouts e variantes correspondentes que não usam símbolos de terceiro nível?

Como posso listar todos os layouts e variantes correspondentes que não usam símbolos de terceiro nível?

Preciso listar todos xkbos layouts possíveis e suas respectivas variantes que não utilizam símbolos de 3º nível. A revisão manual de todos os arquivos no /usr/share/X11/xkb/symbols/diretório é uma loucura. Talvez haja uma maneira mais fácil?

Responder1

Você pode processar a lista de todos os layouts e, para cada item da lista, verificar cada variante correspondente paranível 3símbolos:

list=($(sed '/! layout/,/^$/!d;//d
s/[[:blank:]]*\([^[:blank:]]*\)[[:blank:]].*/\1/' \
< /usr/share/X11/xkb/rules/evdev.lst))

layouts=("${list[@]##*/}")

for i in "${layouts[@]}"; do
sed -n '\|//.*level3|d;H;/xkb_symbols/{s/.*"\(.*\)".*/'"${i}:"'\1/;h}
/^};/{x;/level3/d;s/\n.*//p}' < /usr/share/X11/xkb/symbols/${i}
done

O primeiro sedlista todos os layouts /usr/share/X11/xkb/rules/evdev.lste salva o resultado no array list. Os elementos deste array são então processados ​​via expansão de parâmetros para obter apenas o nome do layout (por exemplo, extrair jpde nec_vndr/jp) e salvos no array layouts.
Em seguida, para cada um itemno arquivo layoutscorrespondente /usr/share/X11/xkb/symbols/${item}é processado para extrair as variantes que não possuemnível 3símbolos: sedprimeiro dexclui todas as linhas comentadas que contêm level3e, em seguida, anexa incondicionalmente cada linha ao Hbuffer antigo. Ele edita a linha que contém o nome da variante acrescentando o nome do layout e sobrescrevendo o hbuffer antigo e, em seguida, no final de cada seção da variante ( /^};/) ele xaltera os buffers, excluindo o espaço do padrão se contiver level3else imprimindo apenas a primeira linha (ou seja,layout: variante). Então o resultado é algo assim:

us:basic
us:ibm238l
us:dvorak
us:dvorak-l
us:dvorak-r
us:dvorak-classic
us:dvp
us:olpc2
us:chr
us:carpalx
us:carpalx-full
us:alt-intl-unicode
us:sun_type6
............
dk:nodeadkeys
dk:winkeys
dk:mac
dk:mac_nodeadkeys
dk:dvorak
dk:sun_type6
............

informação relacionada