Display *display; XDevice *device; XModifierKeymap *modmap; XModifierKeymap *XGetDeviceModifierMapping(display, device) Display *display; XDevice *device;
XModifierKeymap 構造体の modifiermap メンバは、8組の max_keypermod キーコードを持ち、それぞれのキーコードは順に次の モディファイアに対応している: Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, Mod5. それぞれの組においては 0 でないキーコードだけが意味を持ち、 キーコードが 0 であれば無視される。 さらに、0 でない全てのキーコードは、XListInputDevices が返す min_keycode と max_keycode が示す範囲の値でなくてはならない。そうでな い場合には、エラー BadValue となる。 全体のマップ中には、1 つのキーコードは一度しか使用してはならない。 二度以上現れた場合は、エラー BadValue となる。
X サーバはモディファイアをどう変更するかに関して制限をつけることができ る。例えば、あるキーを離したことの検出ができないハードウェアかどうか、 あるキーのオートリピートを無効にできないかどうか、複数のモディファイア キーがサポートされていないかどうか等である。 このような制限が破られた場合はステータス MappingFailed が返され、 いずれのモディファイアも変更されない。 モディファイアとして指定された新しいキーコードが、現在定義されているも のと異なり、そのモディファイアに対する(現在あるいは新しい)キーが論理的 に押されている状態である場合、XSetDeviceModifierMapping は MappingBusy を返し、いずれのモディファイアも変更されない。
XSetDeviceModifierMapping は、エラー BadLengthP, BadDevice, BadMatch, BadAlloc, BadValue を起こすことがある。
XGetDeviceModifierMapping リクエストは、モディファイアとして使わ れるキーを持つ、新しく生成された XModifierKeymap 構造体への ポインタを返す。 この構造体を使い終った後には XFreeModifierMapping を呼んで、こ れを解放しなければならない。 いずれかのモディファイアに対するキーの組に 0 しか値がない場合は、この モディファイアは無効となる。
XGetDeviceModifierMapping はエラー BadDevice, BadMatch を起こすことがある。
typedef struct { int max_keypermod; KeyCode *modifiermap; } XModifierKeymap;