第 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。次に、対応するファイルの
ごとにが処理され、 を持たないバリアントが抽出されます。itemlayouts/usr/share/X11/xkb/symbols/${item}レベル3シンボル:sedまずdを含むコメント行をすべて削除しlevel3、次に各行を無条件にH古いバッファに追加します。バリアント名を含む行を編集し、レイアウト名を先頭に追加して古いバッファを上書きし、次に各バリアントセクション ( )hの最後でバッファを変更し、パターンスペースに が含まれている場合はそれを削除します。それ以外の場合は最初の行 (つまり、/^};/xlevel3レイアウト:バリアント) 結果は次のようになります。

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

関連情報