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

3

Preciso listar todos os possíveis layouts xkb e suas respectivas variantes que não usam símbolos de terceiro nível. A revisão manual de todos os arquivos no diretório /usr/share/X11/xkb/symbols/ é louca, talvez seja mais fácil?

    
por png2378 24.06.2016 / 14:56

1 resposta

3

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

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

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

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

O primeiro sed lista todos os layouts em /usr/share/X11/xkb/rules/evdev.lst e salva o resultado na matriz list . Os elementos dessa matriz são processados posteriormente por meio de expansão de parâmetro para obter apenas o nome do layout (por exemplo, extrair jp de nec_vndr/jp ) e salvos na matriz layouts .
Então, para cada item em layouts , o arquivo /usr/share/X11/xkb/symbols/${item} correspondente é processado para extrair as variantes que não possuem símbolos level3 : sed first d elimina todas as linhas comentadas que contêm level3 , em seguida, adiciona incondicionalmente cada linha ao buffer H old. Ele edita a linha que contém o nome da variante que precede o nome do layout e sobrescreve o buffer h old e, ao final de cada seção variante ( /^};/ ), ele e x altera os buffers, excluindo o espaço padrão se ele contiver level3 else imprimir 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
............
    
por 25.06.2016 / 13:42