
Necesito enumerar todos xkb
los diseños posibles y sus respectivas variantes que no utilizan símbolos de tercer nivel. La revisión manual de todos los archivos en /usr/share/X11/xkb/symbols/
el directorio es una locura, ¿tal vez haya una manera más fácil?
Respuesta1
Puede procesar la lista de todos los diseños y para cada elemento de la lista verificar cada variante correspondiente paranivel 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
El primero sed
enumera todos los diseños /usr/share/X11/xkb/rules/evdev.lst
y guarda el resultado en la matriz list
. Los elementos de esta matriz luego se procesan mediante la expansión de parámetros para obtener solo el nombre del diseño (por ejemplo, extraer jp
de nec_vndr/jp
) y se guardan en la matriz layouts
.
Luego, para cada uno item
en layouts
el archivo correspondiente /usr/share/X11/xkb/symbols/${item}
se procesa para extraer las variantes que no tienennivel 3símbolos: sed
primero d
elimina todas las líneas comentadas que contienen level3
, luego agrega incondicionalmente cada línea al H
búfer anterior. Edita la línea que contiene el nombre de la variante anteponiendo el nombre del diseño y sobrescribiendo el h
búfer antiguo, luego, al final de cada sección de variante ( /^};/
) cambia x
los búferes, eliminando el espacio del patrón si contiene, level3
de lo contrario imprime solo la primera línea (es decir,diseño: variante). Entonces el resultado es algo como esto:
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
............