
Ich muss alle möglichen xkb
Layouts 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 sed
listet alle Layouts in auf /usr/share/X11/xkb/rules/evdev.lst
und 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 jp
aus nec_vndr/jp
) und im Array zu speichern layouts
.
Dann wird für jedes item
in layouts
die entsprechende /usr/share/X11/xkb/symbols/${item}
Datei verarbeitet, um die Varianten zu extrahieren, die keineStufe 3Symbole: löscht sed
zuerst d
alle kommentierten Zeilen, die enthalten level3
, und hängt dann jede Zeile bedingungslos an den H
alten Puffer an. Es bearbeitet die Zeile, die den Variantennamen enthält, stellt den Layoutnamen voran und überschreibt den h
alten Puffer. Dann ändert es am Ende jedes Variantenabschnitts ( /^};/
) die x
Puffer 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
............