
Preciso listar todos xkb
os 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 sed
lista todos os layouts /usr/share/X11/xkb/rules/evdev.lst
e 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 jp
de nec_vndr/jp
) e salvos no array layouts
.
Em seguida, para cada um item
no arquivo layouts
correspondente /usr/share/X11/xkb/symbols/${item}
é processado para extrair as variantes que não possuemnível 3símbolos: sed
primeiro d
exclui todas as linhas comentadas que contêm level3
e, em seguida, anexa incondicionalmente cada linha ao H
buffer antigo. Ele edita a linha que contém o nome da variante acrescentando o nome do layout e sobrescrevendo o h
buffer antigo e, em seguida, no final de cada seção da variante ( /^};/
) ele x
altera os buffers, excluindo o espaço do padrão se contiver level3
else 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
............