3次シンボルを使用しないすべてのレイアウトとそのバリエーションをどのようにリストできますか?

3次シンボルを使用しないすべてのレイアウトとそのバリエーションをどのようにリストできますか?

xkb3番目のレベル記号を使用しない可能性のあるすべてのレイアウトとそのバリエーションをリストする必要があります。/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
............

関連情報