XKB: XkbDescRec

struct XkbDescRecXKB の詳細データ
struct XkbModsRec修飾子定義
互換性マップ
struct XkbCompatMapRec互換性マップ
struct XkbSymInterpretRecシンボル解釈
名前
struct XkbNamesRec名前
typedef struct {
    struct _XDisplay *  display;
    unsigned short      flags;
    unsigned short      device_spec;
    KeyCode             min_key_code;
    KeyCode             max_key_code;
    XkbControlsPtr      ctrls;
    XkbServerMapPtr     server;
    XkbClientMapPtr     map;
    XkbIndicatorPtr     indicators;
    XkbNamesPtr         names;
    XkbCompatMapPtr     compat;
    XkbGeometryPtr      geom;
} XkbDescRec, *XkbDescPtr;
XKB の詳細データ
flags
プライベート値。変更しないこと
device_spec
キーボードのデバイスID または XkbUseCoreKbd
min_key_code
デバイスの最小キーコード
max_key_code
デバイスの最大キーコード
ctrls
コントロールのポインタ
server
サーバーキーマップのポインタ
map
クライアントキーマップのポインタ
indicators
インディケーターのポインタ
names
すべてのコンポーネントの名前のポインタ
compat
互換性マップのポインタ
geom
キーボードの物理的なジオメトリのポインタ
typedef struct _XkbMods {
    unsigned char   mask;
    unsigned char   real_mods;
    unsigned short  vmods;
} XkbModsRec, *XkbModsPtr;
修飾子定義
mask
real_mods と、vmods に関連付けられている実修飾子が含まれる。
XKB によって自動的に再計算されるため、明示的に変更してはならない。
real_mods
実際の修飾子のビット (8個)
vmods
仮想修飾子のビット (16個)
互換性マップ
typedef struct _XkbCompatMapRec {
      XkbSymInterpretPtr sym_interpret;
      XkbModsRec         groups[XkbNumKbdGroups];
      unsigned short     num_si;
      unsigned short     size_si;
} XkbCompatMapRec, *XkbCompatMapPtr;
Xkb の状態と構成を、コアプロトコルの状態と構成にマッピングしたり、コアプロトコルの状態と構成から、マッピングしたりする構成可能なすべての側面は、XkbCompatMapRec 構造に含まれる互換性マップによって定義されます。
さらに、タイプ 2 (コアから Xkb キーボードへのマッピング) の特定のコンポーネントの変換が自動的に行われないようにするために使用される、一連の明示的なオーバーライドコントロール。
groups
グループ互換性マップ。
対応するグループがアクティブなときに、コアプロトコル state フィールドにどの実際の修飾子を設定するかを指定します。
一度にアクティブになるグループは 1 つだけであるため、ある時点では 4 つの可能な変換のうち 1 つだけが適用されます。
XkbDescRec で記述されたデバイスが 4 つのグループをサポートしていない場合、追加の groups フィールドは存在しますが、未定義です。
typedef struct {
    KeySym          sym;
    unsigned char   flags;
    unsigned char   match;
    unsigned char   mods;
    unsigned char   virtual_mod;
    XkbAnyAction    act;
} XkbSymInterpretRec,*XkbSymInterpretPtr;
シンボル解釈は、Xkb キーマップを変更するときに X サーバーをガイドするために使用されます。
シンボル解釈の初期セットは、サーバーの起動時に、サーバーによってロードされます。
クライアントは XkbSetCompatMap を使用して新しいものを追加できます。

シンボルの解釈により、主要なセマンティクスが設定されます。
シンボル解釈が適用されると、サーバー キー イベント処理の次のコンポーネントが、関係する特定のキーに対して変更される可能性があります。
・仮想修飾子マップ
・オートリピート
・キーの動作
・キーアクション
sym
sym が NULL でない場合、シンボルの解釈は、mods および match で指定された基準に一致する修飾子によって、特定の keysym が選択されているキーに制限されます。
sym が NULL の場合、修飾子が mods で指定された基準に一致し、一致する場合、キーで選択された任意のシンボルに解釈が適用されます。
flags
XkbSI_AutoRepeatキーの Xkb キーボードマップに ExplicitAutoRepeat コントロールが設定されていない場合、自動リピート動作は XkbSI_AutoRepeat ビットの値に基づいて設定されます。
XkbSI_AutoRepeat ビットが設定されている場合、キーの自動リピート動作がオンになります。それ以外の場合はオフになります。
XkbSI_LockingKeyキーの Xkb キーボードマップに ExplicitBehavior コントロールが設定されていない場合、ロック動作は XkbSI_LockingKey ビットの値に基づいて設定されます。
XkbSI_LockingKey が設定されている場合、キーの動作は KB_Lock に設定されます。それ以外の場合はオフになります。
match
mods で指定された実際の修飾子がどのように解釈されるかを指定します。

XkbSI_NoneOfmods でオンになっているビットはどれも設定できませんが、他のビットは設定できます。
XkbSI_AnyOfOrNonemods でオンになっているビットを 0 個以上設定でき、他のビットも同様に設定できます。
XkbSI_AnyOfmods でオンになっている 1 つ以上のビットを、他のビットと同様に設定できます。
XkbSI_AllOfmods でオンになっているビットはすべて設定する必要がありますが、他のビットも同様に設定できます。
XkbSI_Exactlymods でオンになっているすべてのビットを設定する必要があり、他のビットを設定することはできません。
XkbSI_LevelOneOnly(フラグ) mods および match で指定された修飾子の一致基準は、sym がそのグループのレベル 1 にある場合にのみ適用されます。
それ以外の場合、mod と match は無視され、シンボルは修飾子が設定されていない条件と一致します。
名前
#define  XkbKeyNameLength      4
#define  XkbKeyNumVirtualMods  16
#define  XkbKeyNumIndicators   32
#define  XkbKeyNumKbdGroups    4
#define  XkbMaxRadioGroups     32

typedef struct {
    char  name[XkbKeyNameLength];
} XkbKeyNameRec, *XkbKeyNamePtr;

typedef struct {
    char  real[XkbKeyNameLength];
    char  alias[XkbKeyNameLength];
} XkbKeyAliasRec, *XkbKeyAliasPtr;

typedef struct _XkbNamesRec {
    Atom            keycodes;
    Atom            geometry;
    Atom            symbols;
    Atom            types;
    Atom            compat;
    Atom            vmods[XkbNumVirtualMods];
    Atom            indicators[XkbNumIndicators];
    Atom            groups[XkbNumKbdGroups];
    XkbKeyNamePtr   keys;
    XkbKeyAliasPtr  key_aliases;
    Atom *          radio_groups;
    Atom            phys_symbols;
    unsigned char   num_keys;
    unsigned char   num_key_aliases;
    unsigned short  num_rg;
} XkbNamesRec, *XkbNamesPtr;
名前
keycodes
キーコード名は、該当のキーボードによって返されるキーコードの範囲と意味を識別します。

キーコード名は、キーボードから返されるキーコードの非常に一般的な説明を目的としています。
すべてのキーが存在する場合に同じセマンティクスを持つ場合、単一のキーコード名で、キー数が異なるキーボードをカバーできる場合があります。
たとえば、101 キーと 102 キーの PC キーボードは同じ名前を使用する場合があります。
このような場合、アプリケーションはキーボード ジオメトリ名を使用して、名前付きキーコードのどのサブセットが使用されているかを判断できます。
geometry
ジオメトリ名は、キーボード上のさまざまなキーの物理的な位置、サイズ、形状を識別します。

keycodes, geometry の名前を区別する例として、PC 互換キーボードのファンクションキーを考えてみましょう。
ファンクションキーはメインキーボードの上にある場合もあれば、メインキーボードの左側にある場合もありますが、物理的な位置に関係なく、論理的に F1 であるキーには同じキーコードが使用されます。
したがって、すべての PC 互換キーボードは同様のキーコード名を共有しますが、ジオメトリ名は異なる場合があります。
symbols
シンボル名は、キーに論理的にバインドされているシンボルを識別します。
シンボル名は、人間またはアプリケーションが読み取り可能な、意図されたロケール、またはこれらのシンボルを使用したキーボードの使用法を説明したものです。
types
タイプ名は、キーボードに関連付けることができるキータイプのセットに関する情報を提供します。
さらに、各キータイプに名前を付けることができ、タイプの各シフトレベルにも名前を付けることができます。
これらの名前は、各タイプとともにマップ記述に格納されますが、他のシンボル名と同じ方法を使用してアクセスされます。
compat
互換名は、コアプロトコル リクエストを使用して変更されるキーにアクションをバインドするために使用されるルールに関する情報を提供します。
vmods
16個の仮想修飾子の名前
indicators
32個のインディケータの名前
groups
4つのキーボードグループの名前
keys
各キーの 4byte の名前。
各キーについて、キー名は、異なるキーコードを報告するキーボード上の同様の機能または同様の位置にあるキーをリンクします。
たとえば、F1 キーは、あるキーボードではキーコード 23 を発行し、別のキーボードではキーコード 86 を発行する場合があります。
両方のキーボードで、このキーに「FK01」という名前を付けることで、キーボードレイアウト設計者は、キーボードの説明の一部を別のキーボードに再利用できます。
key_aliases
実際のキー名とエイリアスのキー名のペアの可変長配列。
実際のキー名とエイリアスのキー名のペアごとに、real フィールドは keys 配列内の名前を参照し、alias フィールドはそのキーのエイリアスを参照します。

キーエイリアスにより、キーボードレイアウト設計者は、1 つのキーに複数のキー名を割り当てることができます。
これにより、キーボードレイアウトの設計者は、位置または「機能」のいずれかを使用してキーを参照できるようになります。
たとえば、キーボードレイアウト設計者は、A31 の ISO9995-5 位置仕様または LEFT の機能仕様を使用して、PC キーボードの左矢印キーを参照したい場合があります。
キーボード設計者は、keys 配列で名前 A31 を使用しますが、key_aliases 配列で A31 のエイリアスとして名前 LEFT を定義することもできます。

※キーボードマッピングのジオメトリコンポーネントで定義されたキーエイリアスは、XkbNamesRec (xkb->names) に保存されているサーバーデータベースのキーコードコンポーネントで定義されたキーエイリアスをオーバーライドします。
したがって、XkbNamesRec によって提供されるキーエイリアスを検討する前に、ジオメトリによって定義されたキーエイリアスを検討してください。
radio_groups
各ラジオグループの名前の可変長配列。

ラジオグループは、一連のラジオボタンの動作をシミュレートするキーのセットです。
ラジオグループ内のキーが一度押されると、そのキーはグループ内の別のキーが押されるまで論理的に押されたままになり、その時点で前に押したキーが論理的に離されます。
したがって、論理的に一度に押すことができるのは、ラジオグループ内の最大 1 つのキーだけです。
phys_symbols
キーボードに実際に刻まれているシンボルを識別します。
このため、symbols と phys_symbols 名は異なる可能性があります。
たとえば、英語 (US) の刻印があり、スイスドイツ語のシンボルを使用しているキーボードの説明では、phys_symbols 名が「en_US」、symbolds 名が「de_CH」になる可能性があります。
num_keys
keys 配列の数
num_key_aliases
key_aliases 配列の数
num_rg
radio_groups 配列の数