Wie kann ich alle Layouts und entsprechenden Varianten auflisten, die keine Symbole der 3. Ebene verwenden?

Wie kann ich alle Layouts und entsprechenden Varianten auflisten, die keine Symbole der 3. Ebene verwenden?

Ich muss alle möglichen xkbLayouts und ihre jeweiligen Varianten auflisten, die keine Symbole der 3. Ebene verwenden. Die manuelle Überprüfung aller Dateien im /usr/share/X11/xkb/symbols/Verzeichnis ist verrückt. Gibt es vielleicht einen einfacheren Weg?

Antwort1

Sie können die Liste aller Layouts verarbeiten und für jedes Element in der Liste jede entsprechende Variante überprüfen fürStufe 3Symbole:

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

Der erste sedlistet alle Layouts in auf /usr/share/X11/xkb/rules/evdev.lstund speichert das Ergebnis im Array list. Die Elemente dieses Arrays werden dann über die Parametererweiterung weiter verarbeitet, um nur den Layoutnamen zu erhalten (z. B. extrahieren jpaus nec_vndr/jp) und im Array zu speichern layouts.
Dann wird für jedes itemin layoutsdie entsprechende /usr/share/X11/xkb/symbols/${item}Datei verarbeitet, um die Varianten zu extrahieren, die keineStufe 3Symbole: löscht sedzuerst dalle kommentierten Zeilen, die enthalten level3, und hängt dann jede Zeile bedingungslos an den Halten Puffer an. Es bearbeitet die Zeile, die den Variantennamen enthält, stellt den Layoutnamen voran und überschreibt den halten Puffer. Dann ändert es am Ende jedes Variantenabschnitts ( /^};/) die xPuffer und löscht den Musterbereich, wenn er enthält level3, andernfalls wird nur die erste Zeile gedruckt (d. h.Layout:Variante). Das Ergebnis sieht also ungefähr so ​​aus:

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
............

verwandte Informationen