struct XkbDescRec | XKB の詳細データ |
---|---|
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 によって自動的に再計算されるため、明示的に変更してはならない。
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 キーボードへのマッピング) の特定のコンポーネントの変換が自動的に行われないようにするために使用される、一連の明示的なオーバーライドコントロール。
さらに、タイプ 2 (コアから Xkb キーボードへのマッピング) の特定のコンポーネントの変換が自動的に行われないようにするために使用される、一連の明示的なオーバーライドコントロール。
groups
グループ互換性マップ。
対応するグループがアクティブなときに、コアプロトコル state フィールドにどの実際の修飾子を設定するかを指定します。
一度にアクティブになるグループは 1 つだけであるため、ある時点では 4 つの可能な変換のうち 1 つだけが適用されます。
XkbDescRec で記述されたデバイスが 4 つのグループをサポートしていない場合、追加の 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 を使用して新しいものを追加できます。
シンボルの解釈により、主要なセマンティクスが設定されます。
シンボル解釈が適用されると、サーバー キー イベント処理の次のコンポーネントが、関係する特定のキーに対して変更される可能性があります。
・仮想修飾子マップ
・オートリピート
・キーの動作
・キーアクション
シンボル解釈の初期セットは、サーバーの起動時に、サーバーによってロードされます。
クライアントは XkbSetCompatMap を使用して新しいものを追加できます。
シンボルの解釈により、主要なセマンティクスが設定されます。
シンボル解釈が適用されると、サーバー キー イベント処理の次のコンポーネントが、関係する特定のキーに対して変更される可能性があります。
・仮想修飾子マップ
・オートリピート
・キーの動作
・キーアクション
sym
sym が NULL でない場合、シンボルの解釈は、mods および match で指定された基準に一致する修飾子によって、特定の keysym が選択されているキーに制限されます。
sym が NULL の場合、修飾子が mods で指定された基準に一致し、一致する場合、キーで選択された任意のシンボルに解釈が適用されます。
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_NoneOf | mods でオンになっているビットはどれも設定できませんが、他のビットは設定できます。 |
---|---|
XkbSI_AnyOfOrNone | mods でオンになっているビットを 0 個以上設定でき、他のビットも同様に設定できます。 |
XkbSI_AnyOf | mods でオンになっている 1 つ以上のビットを、他のビットと同様に設定できます。 |
XkbSI_AllOf | mods でオンになっているビットはすべて設定する必要がありますが、他のビットも同様に設定できます。 |
XkbSI_Exactly | mods でオンになっているすべてのビットを設定する必要があり、他のビットを設定することはできません。 |
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 キーボードは同じ名前を使用する場合があります。
このような場合、アプリケーションはキーボード ジオメトリ名を使用して、名前付きキーコードのどのサブセットが使用されているかを判断できます。
キーコード名は、キーボードから返されるキーコードの非常に一般的な説明を目的としています。
すべてのキーが存在する場合に同じセマンティクスを持つ場合、単一のキーコード名で、キー数が異なるキーボードをカバーできる場合があります。
たとえば、101 キーと 102 キーの PC キーボードは同じ名前を使用する場合があります。
このような場合、アプリケーションはキーボード ジオメトリ名を使用して、名前付きキーコードのどのサブセットが使用されているかを判断できます。
geometry
ジオメトリ名は、キーボード上のさまざまなキーの物理的な位置、サイズ、形状を識別します。
keycodes, geometry の名前を区別する例として、PC 互換キーボードのファンクションキーを考えてみましょう。
ファンクションキーはメインキーボードの上にある場合もあれば、メインキーボードの左側にある場合もありますが、物理的な位置に関係なく、論理的に F1 であるキーには同じキーコードが使用されます。
したがって、すべての PC 互換キーボードは同様のキーコード名を共有しますが、ジオメトリ名は異なる場合があります。
keycodes, geometry の名前を区別する例として、PC 互換キーボードのファンクションキーを考えてみましょう。
ファンクションキーはメインキーボードの上にある場合もあれば、メインキーボードの左側にある場合もありますが、物理的な位置に関係なく、論理的に F1 であるキーには同じキーコードが使用されます。
したがって、すべての PC 互換キーボードは同様のキーコード名を共有しますが、ジオメトリ名は異なる場合があります。
symbols
シンボル名は、キーに論理的にバインドされているシンボルを識別します。
シンボル名は、人間またはアプリケーションが読み取り可能な、意図されたロケール、またはこれらのシンボルを使用したキーボードの使用法を説明したものです。
シンボル名は、人間またはアプリケーションが読み取り可能な、意図されたロケール、またはこれらのシンボルを使用したキーボードの使用法を説明したものです。
types
タイプ名は、キーボードに関連付けることができるキータイプのセットに関する情報を提供します。
さらに、各キータイプに名前を付けることができ、タイプの各シフトレベルにも名前を付けることができます。
これらの名前は、各タイプとともにマップ記述に格納されますが、他のシンボル名と同じ方法を使用してアクセスされます。
さらに、各キータイプに名前を付けることができ、タイプの各シフトレベルにも名前を付けることができます。
これらの名前は、各タイプとともにマップ記述に格納されますが、他のシンボル名と同じ方法を使用してアクセスされます。
compat
互換名は、コアプロトコル リクエストを使用して変更されるキーにアクションをバインドするために使用されるルールに関する情報を提供します。
vmods
16個の仮想修飾子の名前
indicators
32個のインディケータの名前
groups
4つのキーボードグループの名前
keys
各キーの 4byte の名前。
各キーについて、キー名は、異なるキーコードを報告するキーボード上の同様の機能または同様の位置にあるキーをリンクします。
たとえば、F1 キーは、あるキーボードではキーコード 23 を発行し、別のキーボードではキーコード 86 を発行する場合があります。
両方のキーボードで、このキーに「FK01」という名前を付けることで、キーボードレイアウト設計者は、キーボードの説明の一部を別のキーボードに再利用できます。
各キーについて、キー名は、異なるキーコードを報告するキーボード上の同様の機能または同様の位置にあるキーをリンクします。
たとえば、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 によって提供されるキーエイリアスを検討する前に、ジオメトリによって定義されたキーエイリアスを検討してください。
実際のキー名とエイリアスのキー名のペアごとに、real フィールドは keys 配列内の名前を参照し、alias フィールドはそのキーのエイリアスを参照します。
キーエイリアスにより、キーボードレイアウト設計者は、1 つのキーに複数のキー名を割り当てることができます。
これにより、キーボードレイアウトの設計者は、位置または「機能」のいずれかを使用してキーを参照できるようになります。
たとえば、キーボードレイアウト設計者は、A31 の ISO9995-5 位置仕様または LEFT の機能仕様を使用して、PC キーボードの左矢印キーを参照したい場合があります。
キーボード設計者は、keys 配列で名前 A31 を使用しますが、key_aliases 配列で A31 のエイリアスとして名前 LEFT を定義することもできます。
※キーボードマッピングのジオメトリコンポーネントで定義されたキーエイリアスは、XkbNamesRec (xkb->names) に保存されているサーバーデータベースのキーコードコンポーネントで定義されたキーエイリアスをオーバーライドします。
したがって、XkbNamesRec によって提供されるキーエイリアスを検討する前に、ジオメトリによって定義されたキーエイリアスを検討してください。
radio_groups
各ラジオグループの名前の可変長配列。
ラジオグループは、一連のラジオボタンの動作をシミュレートするキーのセットです。
ラジオグループ内のキーが一度押されると、そのキーはグループ内の別のキーが押されるまで論理的に押されたままになり、その時点で前に押したキーが論理的に離されます。
したがって、論理的に一度に押すことができるのは、ラジオグループ内の最大 1 つのキーだけです。
ラジオグループは、一連のラジオボタンの動作をシミュレートするキーのセットです。
ラジオグループ内のキーが一度押されると、そのキーはグループ内の別のキーが押されるまで論理的に押されたままになり、その時点で前に押したキーが論理的に離されます。
したがって、論理的に一度に押すことができるのは、ラジオグループ内の最大 1 つのキーだけです。
phys_symbols
キーボードに実際に刻まれているシンボルを識別します。
このため、symbols と phys_symbols 名は異なる可能性があります。
たとえば、英語 (US) の刻印があり、スイスドイツ語のシンボルを使用しているキーボードの説明では、phys_symbols 名が「en_US」、symbolds 名が「de_CH」になる可能性があります。
このため、symbols と phys_symbols 名は異なる可能性があります。
たとえば、英語 (US) の刻印があり、スイスドイツ語のシンボルを使用しているキーボードの説明では、phys_symbols 名が「en_US」、symbolds 名が「de_CH」になる可能性があります。
num_keys
keys 配列の数
num_key_aliases
key_aliases 配列の数
num_rg
radio_groups 配列の数