XKBはいくつのレイヤーを収容できますか?

XKBはいくつのレイヤーを収容できますか?

コントロール修飾子を押したときにキーストロークをQWERTYにリダイレクトするために、異なる8レベルのドイツNeo2レイアウトに追加レベルを追加します。

9レベルが機能しないとは思わないが、最大レベル数を知れば安心になるだろう。
ステータス/レベル/タイプ情報が32ビットデータ(実際には16進出力xev)でビットマスクされていることをどこかで読みました。

レベル情報を渡すために32ビットすべてが使用されますか?
編集:この2桁の16進数(最大修飾子キー数でなければならない)と最大レベル数(修飾子キーの組み合わせ)を混同しました。この情報は私の質問とは関係ありません。

それは次のとおりです。昨日はXKBを学び始めたので、まだレベル8以上のタイプに触れたことがありません。

type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
    // [...]
    // + map[Control]= Level0;

    level_name[Level0] = "QWERTY shortcuts"
    level_name[Level1] = "Base";
    level_name[Level2] = "Shift";
    level_name[Level3] = "Alt Base";
    level_name[Level4] = "Shift Alt";
    level_name[Level5] = "X";
    level_name[Level6] = "X Shift";
    level_name[Level7] = "X Alt Base";
    level_name[Level8] = "X Shift Alt";
};

ベストアンサー1

すべての引用のソースは次のとおりです。Xキーボード拡張:ライブラリ仕様

特定のキータイプの総レベル数は、次の構造XkbKeyTypeRecに符号なし文字として保存されます(num_levels140ページ) 。

typedef struct { /* Key Type */
 unsigned char num_levels; /* total # shift levels, do not modify directly */
} XkbKeyTypeRec, *XkbKeyTypePtr;

num_levels フィールドには、キータイプの合計シフトレベルの数が保持されます。 Xkbはnum_levelsを使用して、キーにバインドされたシンボルの配列が十分に大きいことを確認します。

理論的には、最大レベル数は255(1から始まる)に制限されます。

ただし、各デザインのキーあたりのシンボル数は255に制限されており、最大4つのグループがある可能性があるため、実際の制限は4つに分けられます。63、127ページで見たように

コア実装では、キーあたりのシンボル数を255に制限します。 4つのグループの場合、各グループは最大63のシンボル(またはシフトレベル)を持つことができます。


ただし、特定のキータイプのレベル数を変更するには、以下を使用してくださいXkbResizeKeyType(145ページ)。

XkbResizeKeyType ( xkb , type_ndx , map_count , want_preserve ,
new_num_lvls )
XkbDescPtr xkb ; /* keyboard description containing client map to update */
int type_ndx ; /* index in xkb->map->types of type to change */
int map_count ; /* total # of map entries needed for the type */
Bool want_preserve ; /* True => list of preserved modifiers is necessary */
int new_num_lvls ; /* new max # of levels for type */

おすすめ記事