
Мне нужно перечислить все возможные xkb
макеты и их соответствующие варианты, которые не используют символы 3-го уровня. Ручной просмотр всех файлов в /usr/share/X11/xkb/symbols/
каталоге — это безумие, может быть, есть более простой способ?
решение1
Вы можете обработать список всех макетов и для каждого элемента в списке проверить каждый соответствующий вариант наУровень 3символы:
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
Первый sed
перечисляет все макеты в /usr/share/X11/xkb/rules/evdev.lst
и сохраняет результат в массиве list
. Затем элементы этого массива обрабатываются далее с помощью расширения параметров, чтобы получить только имя макета (например, извлечь jp
из nec_vndr/jp
) и сохранить в массиве layouts
.
Затем для каждого item
в layouts
соответствующем /usr/share/X11/xkb/symbols/${item}
файле обрабатывается для извлечения вариантов, которые не имеютУровень 3символы: sed
сначала d
удаляет все закомментированные строки, содержащие level3
, затем безусловно добавляет каждую строку в H
старый буфер. Он редактирует строку, содержащую имя варианта, добавляя имя макета и перезаписывая h
старый буфер, затем, в конце каждого раздела варианта ( /^};/
) он x
изменяет буферы, удаляя пространство шаблона, если оно содержит, level3
иначе печатая только первую строку (т.е.макет:вариант). В результате получается что-то вроде этого:
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
............