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