XKB: 関数(2)

互換性マップ
XkbGetCompatMap互換性マップを取得
XkbUpdateMapFromCoreコア形式の情報から、マップを更新
XkbKeyTypesForCoreSymbolsコアシンボルからキータイプを選択
XkbApplyCompatMapToKey特定のキーの互換性マップを適用
XkbSetCompatMap互換性マップをセット
XkbAddSymInterpretシンボル解釈を追加
XkbAllocCompatMap互換性マップを確保
XkbFreeCompatMap互換性マップを解放
名前
名前のコンポーネントのマスク名前のコンポーネントのマスク
struct XkbNameChangesRec名前の変更構造体
XkbGetNames名前のデータを取得
XkbSetNames名前を変更
XkbChangeNames名前の変更をサーバーに適用
XkbNoteNameChangesイベントによる名前変更を構造体にコピー
XkbGetNameChanges名前の一部を取得して構造体にコピー
XkbAllocNames名前を確保
XkbFreeNames名前を解放
コンポーネント
struct XkbComponentNamesRecパターン名
struct XkbComponentListRecコンポーネントリスト
XkbListComponentsコンポーネントのリストを取得
XkbFreeComponentListXkbComponentListPtr を解放
XkbGetKeyboardByName名前付きコンポーネントからXKB詳細を取得
XkbGetKeyboardキーボードのXKB詳細を取得
デバイス情報取得
struct XkbDeviceInfoRecデバイス情報
struct XkbDeviceChangesRecデバイス変更構造体
XkbGetDeviceInfoデバイスの情報を取得
XkbGetDeviceButtonActionsデバイスのボタンアクションを取得
XkbGetDeviceLedInfoデバイスのLED情報を取得
XkbFreeDeviceInfoデバイス情報を解放
XkbAllocDeviceInfoデバイス情報を確保
XkbAllocDeviceLedInfoデバイスLED情報を確保
XkbAddDeviceLedInfoデバイスLEDを追加
XkbResizeDeviceButtonActionsアクションボタンの個数をリサイズ
XkbSetDeviceInfoデバイス情報のセット
XkbSetDeviceButtonActionsボタンアクションのセット
XkbNoteDeviceChanges変更構造体をイベントの値からコピー
XkbGetDeviceInfoChanges変更された情報を取得し、情報を更新
XkbChangeDeviceInfo変更構造体から更新
デバッグ
XkbSetDebuggingFlagsデバッグフラグの設定
互換性マップ
Status XkbGetCompatMap(Display *display, unsigned int which, XkbDescRec *xkb);
エントリ時に互換性マップ構造が xkb に割り当てられていない場合は、XkbGetCompatMap が互換性マップ構造を割り当てます。
すでに存在する場合、その内容は返された結果で上書きされます。

XkbGetCompatMap は、xkb の device_spec フィールドで指定されたデバイスの互換性マップ情報を取得します。
このフィールドを特に変更しない限り、これがデフォルトのキーボードデバイスになります。
which
XkbSymInterpMask, XkbGroupCompatMask, XkbAllCompatMask
戻り値
Success で成功。BadAlloc, BadMatch, BadLength
Bool XkbUpdateMapFromCore(XkbDescPtr xkb, KeyCode first_key, int num_keys, int map_width, KeySym *core_keysyms, XkbChangesPtr changes);
コア形式のキーボードマップを表す入力引数情報を解釈し、xkb で渡された Xkb キーボードの説明を更新します。
Xkb マップの一部 (first_key から first_key + num_keys - 1 の範囲のキーコードを持つキーに対応する部分) のみが更新されます。
XkbUpdateMapFromCore が MappingNotify イベントに応答して呼び出される場合、first_key と num_keys が MappingNotify イベントで報告されます。

xkb 内の Xkb キーボードマッピングを変更することに加えて、行われた変更を示すために変更に渡されるアドレスを持つ変更構造をバックフィルします。
その後、XkbSetMap などの後続の呼び出しで変更を使用して、ローカルの変更をサーバーに伝達できます。
map_width
core_keysyms 内のキーごとの keysym の数
core_keysyms
更新されるキーコード範囲に対応する keysym。first_key から num_keys 個分。
int XkbKeyTypesForCoreSymbols(XkbDescPtr xkb, int map_width, KeySym *core_syms,
    unsigned int protected, int *types_inout, KeySym *xkb_syms_rtrn);
コアプロトコルのセクション 12 で指定されたルールに従って、core_syms のシンボルと type_inout のタイプを展開し、Xkbプロトコルで指定されたルールを使用して、グループ 1 と 2 の正規キータイプを選択します。
Xkb プロトコルを使用し、それらを xkb_syms_rtrn に配置します。これは NULL ではありません。

コアキーマップから 1 行を取得し、それに関連付けられているグループの数、各グループのタイプ、および各グループにバインドされているシンボルを決定します。

グループのマッピングは変更されないが、Xkb キーボード互換性マップに割り当てられたシンボルが変更される場合、キーのセマンティクスが変更される可能性があります。
新しい互換性マッピングを個々のキーに適用してそのセマンティクスを更新するには、XkbApplyCompatMapToKey を使用します。
core_syms
コアのキーマップ。map_width (コアキーマップの幅) * max_key_code 個。
protected
明示的に保護されたキータイプ。
各 Xkb キーの 4 つのグループ (ExplicitKeyType1 〜 ExplicitKeyType4) のそれぞれに関連付けられた明示的なオーバーライドコントロールが 1 つあります。
protected は、これらのコントロールの包含的 OR です。
types_inout
4つの各グループのタイプ。
返されると、types_inout には、自動的に選択された (つまり、正規の) タイプと保護されたタイプが含まれます。
十分なシンボルがある場合、正規型は 4 つのグループすべてに割り当てられます。
types_inout の 4 つのエントリは、問題のキーの 4 つのグループに対応します。
xkb_syms_rtrn
Xkb 順のシンボルが返る
戻り値
グループの数。
Bool XkbApplyCompatMapToKey(XkbDescPtr xkb, KeyCode key, XkbChangesPtr changes);
特定のキーの互換性マップを適用。
これにより、キーの動作、アクション、繰り返しステータス、および仮想修飾子のバインディングが更新されます。
Bool XkbSetCompatMap(Display *display, unsigned int which, XkbDescPtr xkb, Bool update_actions);
xkb のキーボード記述から互換性マップ情報を、xkb の device_spec フィールドで指定されたデバイスのディスプレイの互換性マップで指定されたサーバーにコピーします。
このフィールドを特に変更しない限り、これがデフォルトのキーボードデバイスになります。
which
XkbSymInterpMask, XkbGroupCompatMask, XkbAllCompatMask
update_actions
指定されたデバイスの互換性マップを更新した後、update_actions が True の場合、サーバーは新しい互換性マップをデバイスのキーボード全体に適用して、新しいキーセマンティクスのセット、互換性状態、および新しいコア キーボード マップを生成します。

update_actions が False の場合、新しい互換性マップは、現在のデバイスセマンティクス、状態、またはコア キーボード マップへの変更を生成するために使用されません。
互換性マップをすぐに適用しない理由の 1 つは、あるサーバーが別のサーバーと部分的に一致するように構成されている場合です。
すべてが更新されるまで、マップを適用しないでください。
後で強制的に更新するには、XkbSetCompatMap を使用して、which をゼロに指定し、update_actions を True に指定します。
戻り値
True で成功
XkbSymInterpretPtr XkbAddSymInterpret(XkbDescPtr xkb, XkbSymInterpretPtr si, Bool updateMap, XkbChangesPtr changes);
xkb のシンボル解釈のリストに si を追加します。
updateMap が True の場合、互換性マップがキーボードのすべてのキーに (再) 適用されます。
変更が NULL 以外の場合、影響を受けたキーボードの部分が報告されます (updateMap が True でない限り、大きな変更はありません)。
XkbAddSymInterpret は、リスト内の実際の新しいシンボル解釈へのポインタを返すか、失敗した場合は NULL を返します。
Status XkbAllocCompatMap(XkbDescPtr xkb, unsigned int which, unsigned int num_si);
互換性マップを確保
void XkbFreeCompatMap(XkbDescPtr xkb, unsigned int which, Bool free_map);
互換性マップを解放
free_map
compat 自体を解放
名前
XkbKeycodesNameMask     (1<<0)  Xkb->names  keycodes
XkbGeometryNameMask     (1<<1)  Xkb->names  geometry
XkbSymbolsNameMask      (1<<2)  Xkb->names  symbols
XkbPhysSymbolsNameMask  (1<<3)  Xkb->names  phys_symbols
XkbTypesNameMask        (1<<4)  Xkb->names  type
XkbCompatNameMask       (1<<5)  Xkb->names  compat
XkbKeyTypeNamesMask     (1<<6)  Xkb->map    type[*].name
XkbKTLevelNamesMask     (1<<7)  Xkb->map    type[*].lvl_names[*]
XkbIndicatorNamesMask   (1<<8)  Xkb->names  indicators[*]
XkbKeyNamesMask         (1<<9)  Xkb->names  keys[*], num_keys
XkbKeyAliasesMask       (1<<10) Xkb->names  key_aliases[*], num_key_aliases
XkbVirtualModNamesMask  (1<<11) Xkb->names  vmods[*]
XkbGroupNamesMask       (1<<12) xkb->names  groups[*]
XkbRGNamesMask          (1<<13) Xkb->names  radio_groups[*], num_rg
XkbComponentNamesMask   (0x3f)  Xkb->names  keycodes,geometry,symbols,physical symbols,types,compatibility map
XkbAllNamesMask         (0x3fff) Xkb->names all name components
名前のコンポーネントのマスク
typedef struct _XkbNameChanges {
    unsigned int    changed;
    unsigned char   first_type;
    unsigned char   num_types;
    unsigned char   first_lvl;
    unsigned char   num_lvls;
    unsigned char   num_aliases;
    unsigned char   num_rg;
    unsigned char   first_key;
    unsigned char   num_keys;
    unsigned short  changed_vmods;
    unsigned long   changed_indicators;
    unsigned char   changed_groups;
} XkbNameChangesRec, *XkbNameChangesPtr;
名前の変更構造体
Status XkbGetNames(Display *dpy, unsigned int which, XkbDescPtr xkb);
xkb の names フィールドが NULL の場合、指定された値を取得する前に、names を割り当てて初期化します。
names フィールドが NULL でない場合、which で指定された値を取得し、それらを xkb にコピーします。

xkb の map が NULL の場合、which に XkbKeyTypeNamesMask または XkbKTLevelNamesMask が指定されている場合でも、タイプ名またはシフトレベル名を取得しません。
戻り値
Success, BadAlloc, BadLength, BadMatch, BadImplementation
Bool XkbSetNames(Display *dpy, unsigned int which, unsigned int first_type, unsigned int num_types, XkbDescPtr xkb);
多くの名前を同時に変更するには、XkbSetNames を使用します。
各ビットセットに対して、xkb から対応する値 (配列の場合は値) を取得し、それをサーバーに送信します。

first_type および num_types 引数は、XkbKeyTypeNamesMask または XkbKTLevelNamesMask が設定されており、対応する名前が変更される型のサブセットを指定する場合にのみ使用されます。
これらのマスクビットのいずれかまたは両方が設定されているが、指定された型が不正な場合、XkbSetNames は False を返し、どの名前も更新しません。
xkb に map コンポーネントが含まれていない場合、または first_type および num_types がキーボードの説明で定義されていない型を指定している場合、指定された型は不正です。
Bool XkbChangeNames(Display *dpy, XkbDescPtr xkb, XkbNameChangesPtr changes);
changes によって指定された名前を、キーボード記述 xkb から、dpy によって指定された X サーバーにコピーします。
変更によって不正なタイプ名またはシフトレベル名が指定された場合、XkbChangeNames は中止され、False を返します。
void XkbNoteNameChanges(XkbNameChangesPtr old, XkbNamesNotifyEvent *new, unsigned int wanted);
new で報告され、wanted で指定されたすべての変更を、old で指定された変更レコードにコピーします。
キーボードの説明のローカルコピーを実際の値で更新するには、XkbNoteNameChanges への 1 つ以上の呼び出しの結果を XkbGetNameChanges に渡します。
Status XkbGetNameChanges(Display *dpy, XkbDescPtr xkb, XkbNameChangesPtr changes);
changes パラメータを調べ、サーバーから必要な情報を取得し、結果を xkb キーボードの説明に配置します。
BadAlloc、BadImplementation、BadMatch エラーを生成する可能性があります。
Status XkbAllocNames(XkbDescPtr xkb, unsigned int which, int num_rg, int num_key_aliases);
名前を確保
void XkbFreeNames(XkbDescPtr xkb, unsigned int which, Bool free_map);
名前を解放
free_map
XkbNamesRec 自身を解放するか
コンポーネント
typedef struct _XkbComponentNames {
    char *       keymap;    /* keymap names */
    char *       keycodes;  /* keycode names */
    char *       types;     /* type names */
    char *       compat;    /* compatibility map names */
    char *       symbols;   /* symbol names */
    char *       geometry;  /* geometry names */
} XkbComponentNamesRec, *XkbComponentNamesPtr;
パターン名
typedef struct _XkbComponentList {
    int                  num_keymaps;     /* number of entries in keymap */
    int                  num_keycodes;    /* number of entries in keycodes */
    int                  num_types;       /* number of entries in types */
    int                  num_compat;      /* number of entries in compat */
    int                  num_symbols;     /* number of entries in symbols */
    int                  num_geometry;    /* number of entries in geometry;
    XkbComponentNamePtr  keymap;          /* keymap names */
    XkbComponentNamePtr  keycodes;        /* keycode names */
    XkbComponentNamePtr  types;           /* type names */
    XkbComponentNamePtr  compat;          /* compatibility map names */
    XkbComponentNamePtr  symbols;         /* symbol names */
    XkbComponentNamePtr  geometry;        /* geometry names */
} XkbComponentListRec, *XkbComponentListPtr;

typedef struct _XkbComponentName {
    unsigned short       flags;           /* hints regarding component name */
    char *               name;            /* name of component */
} XkbComponentNameRec, *XkbComponentNamePtr;
コンポーネントリスト
XkbComponentListPtr XkbListComponents(Display *dpy, unsigned int device_spec, XkbComponentNamesPtr ptrns, int *max_inout);
ptrns で指定されたパターンに一致するコンポーネント名のリストをサーバーに問い合わせます。
応答を待ち、一致するコンポーネント名を XkbComponentListRec 構造体で返します。
構造体の使用が完了したら、XkbFreeComponentList を使用して構造体を解放する必要があります。
サーバーは、その特定のデバイスに関連するデータベースの部分に応答を制限することができます (必須ではありません)。
ptrns
コンポーネントのパターンの指定。
この構造には、特別な割り当て制約や他の構造との相互関係はありません。
標準の malloc および free 呼び出し、またはそれらと同等のものを使用して、この構造を割り当ておよび解放します。

ptrns の各フィールドには、対象のコンポーネントに名前を付けるパターンが含まれています。
各パターンは ISO Latin1 エンコーディングの文字で構成されていますが、括弧、ワイルドカード文字「?」および「*」、およびコンポーネントクラスまたはメンバー名で許可されている文字のみを含めることができます。
パターンが NULL の場合、そのタイプのコンポーネントは返されません。

コンポーネント名とのパターン一致では、大文字と小文字が区別されます。
「?」ワイルドカードは、左括弧または右括弧を除く任意の 1 文字に一致します。
「*」ワイルドカードは、左括弧または右括弧を除く任意の数の文字に一致します。
Xkb 拡張で必要とされる文字以外の追加文字をコンポーネントクラスまたはメンバー名に実装が許可している場合、追加文字の 1 つとワイルドカード文字のいずれかを比較した結果は実装に依存します。

パターンに不正な文字が含まれている場合、その不正な文字は無視されます。
マッチング処理は、不正な文字がパターンから省略されたものとして実行されます。
max_inout
サーバーとの間で送受信されるデータの量を調整するために使用されます。
入力時に、返される名前の最大数 (すべてのコンポーネント カテゴリ内の名前の合計数) を指定します。
返されると、max_inout には、リクエストに一致したが制限のために返されなかった名前の数が含まれます。
void XkbFreeComponentList(XkbComponentListPtr list);
XkbComponentListPtr を解放
XkbDescPtr XkbGetKeyboardByName(Display *dpy, unsigned int device_spec,
    XkbComponentNamesPtr names, unsigned int want, unsigned int need, Bool load);
名前付きコンポーネントからXKB詳細を取得
XkbDescPtr XkbGetKeyboard(Display *dpy, unsigned int which, unsigned int device_spec);
XkbGetKeyboard は、キーボードデバイスの 1 つ以上のコンポーネントの現在の説明を読み取るために使用されます。
次のように XkbGetKeyboardByName を呼び出します。

XkbGetKeyboardByName(dpy, device_spec, NULL, which, which, False)
デバイス情報取得
typedef struct {
    char *          name;
    Atom            type;
    unsigned short  device_spec;
    Bool            has_own_state;
    unsigned short  supported;
    unsigned short  unsupported;
    unsigned short  num_btns;
    XkbAction *     btn_acts;
    unsigned short  sz_leds;
    unsigned short  num_leds;
    unsigned short  dflt_kbd_fb;
    unsigned short  dflt_led_fb;
    XkbDeviceLedInfoPtr  leds;
} XkbDeviceInfoRec, *XkbDeviceInfoPtr;

typedef struct {
    unsigned short  led_class;     /* class for this LED device */
    unsigned short  led_id;        /* ID for this LED device */
    unsigned int    phys_indicators; /* bits for which LEDs physically present */
    unsigned int    maps_present;  /* bits for which LEDs have maps in maps */
    unsigned int    names_present; /* bits for which LEDs are in names */
    unsigned int    state;         /* 1 bit ⇒ corresponding LED is on */
    Atom            names[XkbNumIndicators]; /* names for LEDs */
    XkbIndicatorMapRec  maps;      /* indicator maps for each LED */
} XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr;
デバイス情報
name
デバイスの名前
type
デバイスのクラスの登録されたシンボル名 (たとえば、「TABLET」) 。
has_own_state
デバイスがキーボードである (つまり、KeyClass のメンバーである) 場合、デバイスは独自の状態を持ち、has_own_state は True になります。
has_own_state が False の場合、コアキーボードの状態が使用されます。
supported,unsupported
サポートされている、サポートされていない機能のビットマスク。

XkbXI_KeyboardsMaskクライアントは、XInput でサポートされている KeyClass デバイスを使用して、すべての Xkb リクエストとイベントを使用できます。
XkbXI_ButtonActionsMaskクライアントは、KeyClass 以外の XInput デバイスのボタンにキーアクションを割り当てることができます。
XkbXI_IndicatorNamesMaskクライアントは、非 KeyClass XInput デバイス上のインジケーターに名前を割り当てることができます。
XkbXI_IndicatorMapsMaskクライアントは、非 KeyClass XInput デバイス上のインジケーターにインジケーター マップを割り当てることができます。
XkbXI_IndicatorStateMaskクライアントは、非 KeyClass XInput デバイス上のインジケーターのステータスを要求できます。
XkbXI_IndicatorsMaskXkbXI_IndicatorNamesMask | XkbXI_IndicatorMapsMask | XkbXI_IndicatorStateMask
XkbXI_UnsupportedFeaturesMask-
XkbXI_AllDeviceFeaturesMaskXkbXI_Indicators­Mask | XkbXI_ButtonActions­Mask
XkbXI_AllFeaturesMaskXkbXI_AllDevice­FeaturesMask | XkbXI_Keyboards­Mask
XkbXI_AllDetailsMaskXkbXI_AllFeatures­Mask | XkbXI_Unsupported­FeaturesMask
num_btns
btn_acts の個数
btn_acts
ボタンアクション
sz_leds
leds の全体サイズ
num_leds
leds の個数
dflt_kbd_fb
デフォルト (コア kbd) インジケーターの ID
dflt_led_fb
デフォルト (コア kbd) インジケーター フィードバックの ID
typedef struct _XkbDeviceChanges {
    unsigned int    changed;
    unsigned short  first_btn;
    unsigned short  num_btns;
    XkbDeviceLedChangesRec leds;
} XkbDeviceChangesRec, *XkbDeviceChangesPtr;

typedef struct _XkbDeviceLedChanges {
    unsigned short  led_class;    /* class of this indicator feedback bundle */
    unsigned short  led_id;       /* ID of this indicator feedback bundle */
    unsigned int    names;        /* bits indicating which names have changed */
    unsigned int    maps;         /* bits indicating which maps have changed */
    struct _XkbDeviceLedChanges *next; /* link to indicator change record for next set */
} XkbDeviceLedChangesRec, *XkbDeviceLedChangesPtr;
デバイス変更構造体
XkbDeviceInfoPtr XkbGetDeviceInfo(Display *dpy, unsigned int which, unsigned int device_spec, unsigned int ind_class, unsigned int ind_id);
device_spec で指定された入力デバイスに関する情報を返します。

XkbXI_ButtonActionsMask ビットが設定されている場合、返される XkbDeviceInfoRec には、すべてのボタンに対して入力されたボタンアクション (btn_acts フィールド) が含まれます。

XkbXI_IndicatorsMask のビットの 1 つが含まれる場合、インジケーターのフィードバッククラスを ind_class で指定し、インジケーターのフィードバック ID を ind_id で指定する必要があります。
リクエストに XkbXI_IndicatorsMask のビットが含まれていない場合、ind_class パラメータと ind_id パラメータは無視されます。
クラスと ID は、XInput XListInputDevices リクエストを介して取得できます。

XkbXI_IndicatorsMask ビットのいずれかが設定されている場合、返される XkbDeviceInfoRec には、ind_class および ind_id によって識別されるインジケーター フィードバックに対応する LED 構造の部分が埋め込まれます。
XkbDeviceInfoRec の LED ベクトルは必要に応じて割り当てられ、sz_leds と num_leds が埋められます。
ind_class と ind_id に対応する LED エントリの led_class、led_id、および phys_indicators フィールドは常に埋められます。

XkbXI_IndicatorNamesMask が含まれる場合、names_present および names フィールドは、 ind_class と ind_id に対応する LED 構造体が返されます。
XkbXI_IndicatorStateMask が含まれている場合、対応する state フィールドが更新されます。
XkbXI_IndicatorMapsMask が含まれている場合、maps_present フィールドと maps フィールドが更新されます。
device_spec
ほとんどの Xkb 関数の device_spec パラメーターとは異なり、device_spec はキーボードデバイスである必要はありません。
ただし、コア キーボードまたは有効な XInput デバイスのいずれかを示す必要があります。
Status XkbGetDeviceButtonActions(Display *dpy, XkbDeviceInfoPtr device_info,
    Bool all_buttons, unsigned int first_button, unsigned int num_buttons);
device_info の device_spec フィールドで示されるデバイスの必要なボタン情報をサーバーに問い合わせ、応答を待ちます。
成功した場合、要求されたボタンのみのボタンアクション (device_info の btn_acts フィールド) をバックフィルし、name, type, supported, unsupported フィールドを更新し、Success を返します。

all_buttons、first_button、num_buttons は、アクションを返すデバイスボタンを指定します。
all_buttons を True に設定すると、すべてのデバイス ボタンに対するアクションが要求されます。
all_buttons が False の場合、first_button と num_buttons はアクションが要求されるボタンの範囲を指定します。
戻り値
互換性のあるバージョンの Xkb がサーバーで利用できない場合、または Xkb 拡張機能が適切に初期化されていない場合、BadAccess を返します。
割り当てエラーが発生した場合は、BadAlloc。
指定されたデバイス (device_info->device_spec) が無効な場合は、BadKeyboard。
デバイスにボタンがない場合は、BadMatch。
first_button と num_buttons に不正なボタンが指定されている場合、BadValue。
Status XkbGetDeviceLedInfo(Display *dpy, XkbDeviceInfoPtr device_info, unsigned int led_class, unsigned int led_id, unsigned int which);
device_spec->device_info で示される XInput デバイスの led_class と led_id で指定されるフィードバックに必要な LED 情報をサーバーに問い合わせ、応答を待ちます。
成功した場合、結果で決定された device_info の関連フィールドをバックフィルし、Success を返します。
XkbXI_IndicatorNamesMask、XkbXI_IndicatorMapsMask、および XkbXI_IndicatorStateMask のいずれかの包含的 OR である有効な値。

このリクエストが成功したときに入力される device_info のフィールドは、name、type、supported、unsupported、およびビットセットで示される led_class と led_id に対応する LED 構造の部分です。
device_info->leds ベクトルは必要に応じて割り当てられ、sz_leds と num_leds が埋められます。
led_class と led_id に対応する device_info->leds エントリの led_class、led_id、および phys_indicators フィールドは常に埋められます。

XkbXI_IndicatorNamesMask が含まれる場合は、led_class および led_id に対応する device_info->leds 構造体の names_present フィールドと names フィールドが更新され、XkbXI_IndicatorStateMask が含まれる場合は、対応する state フィールドが更新され、XkbXI_IndicatorMapsMask が含まれる場合は、maps_present フィールドと Maps フィールドが更新されます。
戻り値
互換性のあるバージョンの Xkb がサーバーで利用できない場合、または Xkb 拡張機能が適切に初期化されていない場合、BadAccess を返します。
割り当てエラーが発生した場合は、BadAlloc。
デバイスにインジケータがない場合は、BadMatch エラーが返されます。
ledClass または ledID に不正な値がある場合、BadValue エラーが返されます。
有効な値を持っていても、LED を含み、指定されたデバイスに関連付けられているフィードバックが指定されていない場合は、BadMatch エラーが返されます。
void XkbFreeDeviceInfo(XkbDeviceInfoPtr device_info, unsigned int which, Bool free_all);
デバイス情報を解放
free_all
device_info 自身を含むすべてを解放
XkbDeviceInfoPtr XkbAllocDeviceInfo(unsigned int device_spec, unsigned int n_buttons, unsigned int sz_leds);
デバイス情報を確保
Status XkbAllocDeviceLedInfo(XkbDeviceInfoPtr device_info, int num_needed);
デバイスLED情報を確保
XkbDeviceLedInfoPtr XkbAddDeviceLedInfo(XkbDeviceInfoPtr device_info, unsigned int led_class, unsigned int led_id);
デバイスLEDを追加
Status XkbResizeDeviceButtonActions(XkbDeviceInfoPtr device_info, unsigned int new_total);
アクションボタンの個数をリサイズ
Bool XkbSetDeviceInfo(Display *dpy, unsigned int which, XkbDeviceInfoPtr device_info);
device_info 構造体で指定されたデバイスの特性を変更するリクエストをサーバーに送信します。
変更された特定の特性は、設定されたビットによって識別され、device_info の関連フィールドから値を取得します。
リクエストがサーバーに正常に送信された場合、XkbSetDeviceInfo は True を返します。
X サーバーの実装が XInput と Xkb 拡張機能の間の対話を許可しない場合、関数は何もせず False を返します。

device_info->device_spec で指定されたデバイスにボタンが含まれておらず、ボタンに影響を与えるリクエストが行われた場合、またはデバイスにインジケータが含まれておらず、インジケータに影響を与えたリクエストが行われた場合、BadMatch プロトコル エラーが発生します。

XkbGetDeviceInfo によって返される supported に XkbXI_ButtonActionsMask ビットが設定されている場合、Xkb 拡張機能により、アプリケーションはコア キーボード デバイス以外の XInput デバイス上のボタンにキー アクションを割り当てることができます。
XkbXI_ButtonActionsMask が設定されている場合、device_info で指定されたすべてのボタンのアクションは、device_info->btn_acts で指定された XkbActions に設定されます。
更新を要求されたボタンの数がデバイスに対して有効でない場合、XkbSetDeviceInfo は False を返し、BadValue プロトコル エラーが発生します。

XkbXI_IndicatorMapsMask および/または XkbXI_IndicatorNamesMask ビットが、supported に設定されている場合、Xkb 拡張機能により、アプリケーションは非キーボードデバイスのインジケーターにマップおよび/または名前を割り当てることができます。
サポートされている場合、キーボード フィードバックの一部であるかインジケーター フィードバックの一部であるかに関係なく、マップや名前をすべての拡張デバイス インジケーターに割り当てることができます。

XkbXI_IndicatorMapsMask および/または XkbXI_IndicatorNamesMask フラグが設定されている場合、device_info->leds で指定されたすべての device_info->num_leds インジケーター デバイスのインジケーター マップおよび/または名前が、device_info->leds で指定されたマップおよび/または名前に設定されます。
device_info->leds->led_class および led_id は、変更する各インジケーター デバイスの XInput クラスとデバイス ID を指定します。
無効な値がある場合、BadValue プロトコル エラーが発生し、XkbSetDeviceInfo は False を返します。
有効な値を持っていても、問題のデバイスのキーボードまたはインジケーター クラスのフィードバックが指定されていない場合、BadMatch エラーが発生します。
device_info->leds->names の値のいずれかが有効な Atom または None ではない場合、BadAtom プロトコル エラーが発生します。
Bool XkbSetDeviceButtonActions(Display *dpy, XkbDeviceInfoPtr device_info, unsigned int first_button, unsigned int num_buttons);
device_info->device_spec で指定されたデバイスのボタンにアクションを割り当てます。
アクションは、first_button で始まる num_buttons 個のボタンに割り当てられ、device_info->btn_acts で指定されたアクションから取得されます。

サーバーが拡張デバイス ボタンへの Xkb アクションの割り当てをサポートしていない場合、XkbSetDeviceButtonActions は効果がなく、False を返します。
デバイスにボタンがない場合、または first_button または num_buttons が device_info->num_btns で決定される有効範囲外のボタンを指定している場合、関数は効果がなく、False を返します。
それ以外の場合、XkbSetDeviceButtonActions は、指定されたボタンのアクションを変更するリクエストをサーバーに送信し、True を返します。

サーバーに送信された実際のリクエストに不正なボタン番号が含まれていた場合、BadValue プロトコル エラーが生成されます。
device_info->device_spec で無効なデバイス識別子が指定された場合、BadKeyboard プロトコル エラーが発生します。
device_info->device_spec で指定した実デバイスにボタンが含まれていない場合に、ボタンに影響するリクエストを行うと BadMatch プロトコルエラーが発生します。
void XkbNoteDeviceChanges(XkbDeviceChangesPtr old, XkbExtensionDeviceNotifyEvent *new, unsigned int wanted);
old で指定された XkbDeviceChangesRec を、wanted で指定された変更と new->reason に含まれる変更の両方で更新します。
Status XkbGetDeviceInfoChanges(Display *dpy, XkbDeviceInfoPtr device_info, XkbDeviceChangesPtr changes);
XkbGetDeviceInfo を呼び出し、変更された属性の現在のステータスを取得します。
次に、device_info 内のデバイスのローカル説明を新しい情報で更新します。
Bool XkbChangeDeviceInfo(Display *dpy, XkbDeviceInfoPtr device_info, XkbDeviceChangesPtr changes);
device_info->device_spec で指定されたデバイスのサーバーの説明を、changes で指定され device_info に含まれる変更で更新します。
更新は XkbSetDeviceInfo リクエストによって行われます。
デバッグ
Bool XkbSetDebuggingFlags(Display *display, unsigned int mask, unsigned int flags, char *msg, unsigned int ctrls_mask,
    unsigned int ctrls, unsigned int *ret_flags, unsigned int *ret_ctrls);
mask と flags で指定されたデバッグ出力フラグを変更し、ctrls_mask と ctrls で指定されたデバッグ制御フラグを変更し、メッセージ msg を出力し、結果のデバッグ出力フラグとデバッグ制御フラグで ret_flags と ret_ctrls をバックフィルします。

デバッグ出力マスク、マスク、フラグにビットが設定されている場合、Xkb は処理中の適切な時点で各ビットに対応するデバッグ情報を出力します。
出力が書き込まれるデバイスは実装に依存しますが、通常は X サーバー エラー メッセージが送信されるデバイスと同じです。
したがって、マスクとフラグに設定できるビットは実装固有です。
デバッグ出力の選択をオンにするには、マスク パラメーターで出力のビットを設定し、フラグ パラメーターで対応するビットを設定します。
イベントのイベント選択をオフにするには、マスク パラメーターで出力のビットを設定し、フラグ パラメーターで対応するビットを設定しないでください。

デバッグ制御マスク ctrls_mask および ctrls にビットが設定されると、Xkb は各制御ビットに従って動作を変更します。
ctrls_mask と ctrls は、マスクとフラグと同じように関連しています。
ctrls
XkbDF_DisableLocks: 修飾子をロックするアクションを無効にする