入力デバイス

ポインタグラブ
XGrabPointerポインタをアクティブグラブ
XUngrabPointerポインタのグラブを解除
XChangeActivePointerGrabグラブのパラメータを変更
XGrabButtonボタンが押された時にグラブする
XUngrabButtonボタンのグラブを解放
キーボードグラブ
XGrabKeyboardキーボードをグラブ
XUngrabKeyboardキーボードのグラブを解放
XGrabKeyキーが押された時にグラブする
XUngrabKeyキーのグラブを解除
ほか
XAllowEventsグラブ中のイベントの一部を解放
XSetInputFocus入力フォーカスを変更
XGetInputFocusフォーカスウィンドウと現在の revert_to を返す
キー関連
XLookupKeysymキーイベントの keycode から KeySym 取得
XLookupStringキーイベントから KeySym や文字列を取得
XKeycodeToKeysymキーコードから KeySym 取得
XKeysymToKeycodeKeySym からキーコードを取得
XRefreshKeyboardMappingキーマップ情報を更新
XConvertCaseKeySym の大文字・小文字を取得
XStringToKeysymKeySym の名前から KeySym 取得
XKeysymToStringKeySym から名前を取得
XRebindKeysymKeySym に対応する文字列を再バインド
キーボード制御
XChangeKeyboardControlキーボードの制御を変更
XGetKeyboardControlキーボードの現在の制御値を取得
XAutoRepeatOn
XAutoRepeatOff
オートリピートをON/OFF
XBellキーボードのベルを鳴らす
XQueryKeymap各キーが押されているかの状態を取得
ポインタ制御
XWarpPointerポインタの位置を移動
XSetPointerMappingポインタボタンのマッピングを変更
XGetPointerMappingポインタボタンのマッピングを取得
XChangePointerControlポインタの移動制御を変更
XGetPointerControlポインタの移動制御の値を取得
キーマップ
XDisplayKeycodesディスプレイでサポートされている最小キーコードと最大キーコードを返す
XGetKeyboardMappingキーコードの KeySym マッピングを返す
XChangeKeyboardMappingキーコードの KeySym マッピングを変更
XNewModifiermapXModifierKeymap 構造体を作成
XFreeModifiermapXModifierKeymap を解放
XInsertModifiermapEntryXModifierKeymap に指定キーコードと修飾子のセットを追加
XDeleteModifiermapEntryXModifierKeymap から指定キーコードと修飾子のセットを削除
XSetModifierMappingXModifierKeymap を適用
XGetModifierMapping現在の修飾子マップを取得
ポインタグラブ
int XGrabPointer(Display *display, Window grab_window, Bool owner_events, unsigned int event_mask,
    int pointer_mode, int keyboard_mode, Window confine_to, Cursor cursor, Time time);
アクティブにポインタをグラブし、成功した場合は GrabSuccess を返します。
以降のポインタイベントは、グラブしたクライアントにのみ報告されます。
すでにアクティブグラブされている場合は、設定を上書きします。

グラブ中は、ポインタがグラブウィンドウ上にあるものとして扱われるので、場合によって EnterNotify と LeaveNotify イベントが生成されます。

成功した場合、最終ポインタグラブ時刻は、引数で指定された時刻に設定されます (CurrentTime は現在の X サーバー時刻に置き換えられる)。
owner_events
ポインタイベントを通常通り報告するか、グラブウィンドウに報告するか。

False の場合、ポインタイベントは grab_window に報告され、引数の event_mask で指定されたイベントのみ報告されます。
True の場合、通常このクライアントに報告されるポインタイベントの場合、通常通りのイベントとして、本来のウィンドウに報告されます。それ以外の場合、grab_window に報告され、引数の event_mask で選択されたイベントのみ報告されます。
(クライアントが管理しているウィンドウには通常通り送り、それ以外はグラブウィンドウに送る)

どちらの場合も、報告されないイベントは破棄されます。
event_mask
クライアントに報告するイベントのマスク。

ButtonPressMask、ButtonReleaseMask、EnterWindowMask、LeaveWindowMask、PointerMotionMask、PointerMotionHintMask
Button1MotionMask、Button2MotionMask、Button3MotionMask、Button4MotionMask、Button5MotionMask、ButtonMotionMask
KeymapStateMask
pointer_mode
GrabModeAsync の場合、ポインタイベントの処理は通常通り続行され、ポインタが現在このクライアントによって凍結されている場合は、ポインタのイベントの処理が再開されます。

GrabModeSync の場合、クライアントから見えるポインタの状態はフリーズしているように見え、グラブしているクライアントが XAllowEvents を呼び出すか、ポインタのグラブが解放されるまで、X サーバーはそれ以上のポインタイベントを生成しません。
ポインタが凍結されている間、イベントは後で処理するためにサーバーのキューに入れられる。
keyboard_mode
GrabModeAsync の場合、キーボードのイベント処理は、グラブによる影響を受けません。

GrabModeSync の場合、クライアントから見えるキーボードの状態はフリーズしているように見え、グラブしているクライアントが XAllowEvents を呼び出すか、ポインタのグラブが解放されるまで、X サーバーはそれ以上のキーボードイベントを生成せず、サーバーのキューに入れる。
confine_to
カーソルは、指定したウィンドウの外に移動できないように制限されます。None でなし。
confine_to ウィンドウは、grab_window と関係がある必要はありません。
ポインタが confine_to ウィンドウ内に表示されていない場合、グラブがアクティブになる直前に、ポインタは最も近い境界に自動的に移動され、通常どおり Enter/Leave イベントが生成されます。
その後 confine_to ウィンドウが再構成された場合は、ポインタは必要に応じて自動的に移動し、ウィンドウ内の位置に留まる。
cursor
グラブ中に表示されるカーソル。
None が指定されている場合は、ポインタが grab_window またはそのサブウィンドウのいずれかの上にあるとき、ウィンドウの通常のカーソルが表示されます。
それ以外の場合は、grab_window のカーソルが表示されます。
time
時間または CurrentTime。
アプリケーションの応答に時間がかかる場合や、ネットワークの遅延が長い場合に発生する特定の状況を回避できます。
戻り値
成功時は GrabSuccess。
GrabNotViewable: grab_window または confine_to ウィンドウが表示されていない場合、または confine_to ウィンドウがルートウィンドウの完全に外側にある場合。
AlreadyGrabbed: ポインタが他のクライアントによって、アクティブにグラブされている場合。
GrabFrozen: 別のクライアントのアクティブなグラブによって、ポインタが凍結されている場合。
GrabInvalidTime: time が最後のポインタグラブ時刻より早いか、現在の X サーバー時刻よりも遅い場合。
XUngrabPointer(Display *display, Time time);
このクライアントによって、アクティブにグラブされている場合、グラブを解除し、凍結されているイベントを解放します。
time が最後のポインタグラブ時刻よりも早い場合、または、現在の X サーバー時刻よりも後の場合、解放しません。

また、場合によって EnterNotify と LeaveNotify イベントも生成されます。

グラブのウィンドウまたは confine_to ウィンドウが表示できなくなった場合、または、ウィンドウの再構成によって、confine_to ウィンドウがルートウィンドウの完全な外側に出た場合、X サーバーは自動的に XUngrabPointer を行います。
time
時間または CurrentTime
XChangeActivePointerGrab(Display *display, unsigned int event_mask, Cursor cursor, Time time);
ポインタがクライアントによってアクティブにグラブされていて、time が最後のポインタグラブ時刻より後で、現在の X サーバー時刻よりも遅くない場合に、グラブのパラメータを変更します。

この関数は、XGrabButton のパッシブパラメータには影響しません。
XGrabButton(Display *display, unsigned int button, unsigned int modifiers, Window grab_window,
    Bool owner_events, unsigned int event_mask, int pointer_mode, int keyboard_mode, Window confine_to, Cursor cursor);
パッシブなグラブを確立します。

指定したボタンと修飾子が押された時に、ポインタはアクティブにグラブされ、最後のポインタグラブ時刻は、ボタンが押された時刻に設定される。
ボタンを押した時の ButtonPress イベントは常に報告されます。

以下の条件に当てはまる場合、グラブが開始されます。

  • ポインタがグラブされていない状態で、指定されたボタンが押されている・指定された修飾子が押されている・他のボタンや修飾子が押されていない場合。
  • 現在、grab_window 上にポインタがある。
  • confine_to ウィンドウが指定されている場合、それが表示されている。
  • grab_window の祖先で、同じボタン/キーの組み合わせのパッシブグラブが存在しない。

ボタンが離されると、アクティブなグラブは自動的に終了します (修飾子の状態は関係なし)。

同じクライアント・同じウィンドウ・同じボタン/キーの組み合わせを指定すると、上書きされます。

grab_window の上でボタンが押されると、ルートウィンドウから順に子をたどる形で、パッシブグラブが検索されます。常に親のパッシブグラブが優先されます。

他のクライアントが、同じウィンドウ上で同じボタン/キーの組み合わせを使用している場合、BadAccess エラーが発生します。
AnyModifier または AnyButton を使用する場合、いずれかの組み合わせで競合するグラブがある場合、BadAccess エラーが発生します。
button
グラブするポインタのボタン、または AnyButton (すべてのボタンが対象)。
指定されたボタンが、現在物理ボタンに割り当てられていなくても良い。
modifiers
修飾子のセット、または AnyModifier (修飾子なしも含む、すべての修飾子の組み合わせ。値は 0 ではない)。
ShiftMask、LockMask、ControlMask、Mod1Mask、Mod2Mask、Mod3Mask、Mod4Mask、Mod5Mask
※NumLock や CapsLock の状態も含まれるので注意。
XUngrabButton(Display *display, unsigned int button, unsigned int modifiers, Window grab_window);
このクライアントによって、XGrabButton でグラブされた組み合わせを解放する。
(他のクライアントによって設定されたグラブは解放できない)
button
AnyButton の場合は、すべてのボタンを対象にして解放する。
modifiers
AnyModifier の場合は、修飾子のない組み合わせを含む、すべての修飾子の組み合わせを対象にして解放する。
キーボードグラブ
int XGrabKeyboard(Display *display, Window grab_window, Bool owner_events, int pointer_mode, int keyboard_mode, Time time);
キーボードをグラブし、FocusIn および FocusOut イベントを生成します。
キーボードイベントは、グラブしているクライアントにのみ報告されます。
このクライアントによってすでにアクティブにグラブされている場合、上書きします。

成功した場合、最後にキーボードをグラブした時刻は、指定された時刻に設定されます (CurrentTime は現在の X サーバー時刻に置き換えられます)。
owner_events
False の場合、すべてのキーイベントが grab_window に報告されます。
True の場合、通常このクライアントに報告されるイベントの場合は、通常通りのイベントとして報告されます。それ以外の場合、grab_window に報告されます。
KeyPress と KeyRelease イベントは両方とも、イベントマスクの選択と関係なく、常に報告されます。
pointer_mode
ポインタイベントを凍結するか。
GrabModeAsync で通常。
GrabModeSync の場合、ポインタイベントを凍結し、グラブしているクライアントが XAllowEvents を呼び出すか、キーボードのグラブが解放されるまで、X サーバーはそれ以上のポインタイベントを生成しません。
keyboard_mode
キーボードイベントを凍結するか。
GrabModeAsync で通常。このクライアントによってキーボードが現在凍結されている場合、キーボードイベントの処理が再開されます。

GrabModeSync の場合、キーイベントを凍結し、グラブしているクライアントが XAllowEvents を呼び出すか、キーボードグラブが解放されるまで、X サーバーはそれ以上のキーボードイベントを生成しません。
戻り値
キーボードが他のクライアントによってアクティブにグラブされている場合、グラブは失敗し、AlreadyGrabbed を返します。
grab_window が表示できない場合は失敗し、GrabNotViewable を返します。
キーボードが別のクライアントのアクティブなグラブによって凍結されている場合、失敗して GrabFrozen を返します。
指定された時刻が、最後のキーボードグラブ時刻よりも早い場合、または現在の X サーバー時刻よりも遅い場合、処理は失敗し、GrabInvalidTime を返します。
XUngrabKeyboard(Display *display, Time time);
このクライアントが、XGrabKeyboard または XGrabKey によってアクティブにグラブしたキーボードを解放します。
指定された時刻が最後のキーボードグラブ時刻より早い場合、または現在の X サーバー時刻より遅い場合、解放されません。
また、FocusIn および FocusOut イベントも生成します。
グラブウィンドウが表示できなくなった場合、X サーバーは自動的にグラブを解放します。
time
タイムスタンプまたは CurrentTime
XGrabKey(Display *display, int keycode, unsigned int modifiers, Window grab_window,
    Bool owner_events, int pointer_mode, int keyboard_mode);
キーボードのパッシブグラブを確立します。
ルートウィンドウに対して設定すると、ホットキーとして扱うことができます。

指定したキーと修飾子が押された時、キーボードはアクティブにグラブされます。
最後のキーボードグラブ時刻は、キーが押された時刻 (KeyPress イベントの time) に設定され、KeyPress イベントが報告されます。

以下の条件に当てはまる時、グラブが実行されます。

  • キーボードがグラブされておらず、指定キー (物理キー番号) と修飾子が押されていて、他の修飾子が押されていない場合。
  • grab_window がフォーカスウィンドウまたはその祖先であるか、grab_window がフォーカスウィンドウの子孫でその中にポインタがある場合。
  • 同じキーの組み合わせに対するパッシブグラブが、grab_window の祖先に存在しないこと。

残りの引数の解釈は XGrabKeyboard と同様です。
キーボードの論理状態で指定されたキーが解放されると、アクティブなグラブは自動的に終了します (修飾キーの押し状態は関係ない)。

他のクライアントが、同じウィンドウ上で同じキーの組み合わせを使用している場合、BadAccess エラーが発生します。
AnyModifier または AnyKey を使用する場合、いずれかの組み合わせで競合するグラブがある場合、BadAccess エラーが発生します。
keycode
物理キー番号、または AnyKey。
指定されたキーコードは、XDisplayKeycodes で取得できる、min_keycode と max_keycode の範囲内である必要があります。そうでない場合は、BadValue エラーが発生します。
modifiers
同時に押されている修飾子、または AnyModifier。
ShiftMask、LockMask、ControlMask、Mod1Mask、Mod2Mask、Mod3Mask、Mod4Mask、Mod5Mask
XUngrabKey(Display *display, int keycode, unsigned int modifiers, Window grab_window);
このクライアントでグラブされている、キーの組み合わせを解放します。
アクティブなグラブには影響しません。
ほか
XAllowEvents(Display *display, int event_mode, Time time);
クライアントがデバイスを凍結させている場合、キューに入れられたイベントの一部を解放します。
指定された時刻がクライアントの最新のアクティブなグラブの最後のグラブ時刻よりも早い場合、または指定された時刻が現在の X サーバー時刻よりも遅い場合は、効果はありません。
event_mode
AsyncPointerポインタがクライアントによって凍結されている場合、ポインタイベントの処理は通常どおり続行されます。
ポインタがクライアントによって凍結されていない場合、AsyncPointer は効果がありませんが、このクライアントがポインタをグラブしている必要はありません。
SyncPointerポインタがクライアントによって凍結されている場合、次の ButtonPress または ButtonRelease イベントがクライアントに報告されるまで通常のグラブが続行され、その後、再び凍結されます。
ただし、報告されたイベントによって、ポインタのグラブが解放された場合、ポインタは凍結されません。
クライアントによって凍結されていない場合、またはポインタがクライアントによってグラブされていない場合、SyncPointer は効果がありません。
ReplayPointerポインタがクライアントによってアクティブにグラブされ、クライアントに送信されたイベントの結果として凍結されている場合 (XGrabButton でアクティブ化、または、XGrabPointer からではなく、SyncPointer モードを持つ以前の XAllowEvents から)、ポインタグラブは解放され、最初の ButtonPress も含めて、イベントが完全に再処理されます。
ただし、今回解放されたグラブの grab_window より上(ルート方向)のパッシブグラブは無視します。
クライアントによってグラブされていない場合、またはイベントの結果としてポインタが凍結されていない場合、リクエストは効果がありません。
AsyncKeyboardキーボードがクライアントによって凍結されている場合、キーボードイベント処理は通常どおり続行されます。
2 回の個別のグラブのために、クライアントによってキーボードが 2 回凍結された場合、AsyncKeyboard は両方のキーボードを凍結します。
キーボードがクライアントによって凍結されていない場合、AsyncKeyboard は効果がありませんが、クライアントがキーボードをグラブしている必要はありません。
SyncKeyboardクライアントによってアクティブにグラブされ、キーボードが凍結された場合、キーボードイベントの処理は、次の KeyPress または KeyRelease イベントがクライアントに報告されるまで、通常どおり続行されます。
その後、キーボードは再び凍結される。
ただし、報告されたイベントによってキーボードのグラブが解放された場合は、キーボードは凍結しません。
キーボードがクライアントによって凍結されていない場合、またはキーボードがクライアントによってグラブされていない場合、SyncKeyboard は効果がありません。
ReplayKeyboardキーボードがクライアントによってアクティブにブラグされ、イベントがクライアントに送信された結果 (XGrabKey のアクティブ化、または XGrabKeyboard からではなく SyncKeyboard モードを持つ以前の XAllowEvents から) の結果として凍結されている場合、キーボードのグラブは解放され、そのイベントが完全に再処理されます。
ただし、解放されたグラブの grab_window 以上(ルート方向)のパッシブグラブは無視します。
クライアントがキーボードをグラブしていない場合、またはイベントの結果としてキーボードが凍結していない場合、効果がありません。
SyncBothポインタとキーボードの両方がクライアントによって凍結されている場合、次の ButtonPress、ButtonRelease、KeyPress、KeyRelease イベントが、グラブされたデバイスのクライアントに報告されるまで、両方のデバイスのイベント処理は通常どおり続行されます (ポインタのボタンイベントとキーイベント)。その後、デバイスは再び凍結する。
ただし、報告されたイベントによってグラブが解放された場合、デバイスは凍結しません (ただし、他のデバイスがまだグラブされている場合、そのデバイスの後続のイベントによって両方のデバイスが凍結します)。
SyncBoth は、ポインタとキーボードの両方がクライアントによって凍結されていない限り、効果がありません。
2 つの個別のグラブに代わって、クライアントによってポインタまたはキーボードが 2 回凍結された場合、SyncBoth は両方の凍結を解除します (ただし、その後の SyncBoth の凍結は各デバイスを 1 回だけ凍結します)。
AsyncBothポインタとキーボードがクライアントによって凍結された場合、両方のデバイスのイベント処理を通常どおり続行します。
2 つの個別のグラブのためにクライアントによってデバイスが 2 回凍結された場合、AsyncBoth は両方のデバイスを凍結します。
AsyncBoth は、ポインタとキーボードの両方がクライアントによって凍結されていない限り、効果がありません。

AsyncPointer、SyncPointer、ReplayPointer は、キーボードイベントの処理には影響しません。
AsyncKeyboard、SyncKeyboard、ReplayKeyboard は、ポインタイベントの処理には影響しません。

ポインタグラブとキーボードグラブの両方 (同じ、または異なるクライアントによる) を同時にアクティブにすることができます。
いずれかのグラブに代わって、デバイスが凍結された場合、そのデバイスに対してイベント処理は実行されません。
両方のグラブが原因で、単一のデバイスが凍結する可能性があります。
この場合、イベントを再び処理できるようになる前に、両方のグラブに代わって凍結を解除する必要があります。
デバイスが 1 つのクライアントによって 2 回凍結された場合、1 つの XAllowEvents によって両方が解除されます。
XSetInputFocus(Display *display, Window focus, int revert_to, Time time);
入力フォーカスと最終フォーカス変更時刻を変更します。

指定した時刻が現在の最終フォーカス変更時刻より早い場合、または現在の X サーバー時刻より遅い場合は、効果はありません。
それ以外の場合、最終フォーカス変更時刻は指定された時刻に設定されます (CurrentTime は現在の X サーバー時刻に置き換えられます)。

X サーバーは FocusIn および FocusOut イベントを生成します。

指定されたフォーカスウィンドウは、XSetInputFocus の呼び出し時に表示可能でなければなりません。そうでない場合は、BadMatch エラーが発生します。
focus
フォーカスウィンドウ。
生成されたキーボードイベントが、通常このウィンドウまたはその下位ウィンドウの 1 つに報告される場合、イベントは通常どおり報告されます。
それ以外の場合、イベントはフォーカスウィンドウを基準にして報告されます。

None の場合、新しいフォーカスウィンドウが設定されるまで、すべてのキーボードイベントは破棄され、revert_to 引数は無視されます。

PointerRoot の場合、フォーカスウィンドウは、ルートウィンドウとして常に動的に取得されます。
各キーボードイベントにおいて、ポインタが置かれているスクリーンのルートウィンドウが使用されます。
この場合、revert_to 引数は無視されます。
revert_to
後でフォーカスウィンドウが表示できなくなった場合、X サーバーはこの値を評価して、次のように新しいフォーカスウィンドウを決定します。

RevertToParent の場合、フォーカスは親 (または最も近い表示可能な祖先) となり、新しい revert_to 値は RevertToNone となります。
RevertToPointerRoot または RevertToNone の場合、フォーカスはそれぞれ PointerRoot または None になります。

フォーカスが変更されると、X サーバーは FocusIn および FocusOut イベントを生成しますが、最終フォーカス変更時間は影響を受けません。
time
タイムスタンプまたは CurrentTime
XGetInputFocus(Display *display, Window *focus_return, int *revert_to_return);
フォーカスウィンドウと現在の revert_to を返す。
focus_return
フォーカスウィンドウが入る。
ウィンドウ or PointerRoot or None
revert_to_return
フォーカスウィンドウが表示できなくなった時のウィンドウ指定。
RevertToParent, RevertToPointerRoot, RevertToNone
キー関連
KeySym XLookupKeysym(XKeyEvent *key_event, int index);
キーマッピングのリストから、XKeyEvent 構造体の keycode に対応する KeySym を返します。
key_event
KeyPress or KeyRelease イベントの構造体
index
KeySym リストのインデックス番号
戻り値
keycode に KeySym が定義されていない場合、NoSymbol
<X11/Xutil.h>
int XLookupString(XKeyEvent *event_struct, char *buffer_return, int bytes_buffer, KeySym *keysym_return, XComposeStatus *status_in_out);
キーイベントから KeySym および文字列を取得します。
KeySym は、Shift、Lock、group、numlock 修飾子の標準解釈を使用して取得されます。

KeySym が再バインドされている場合 (XRebindKeysym 参照)、バインドされた文字列がバッファに格納されます。
それ以外の場合、KeySym は、可能であれば ISO Latin-1 文字、または ASCII 制御文字にマップされ、その文字がバッファに格納されます。
buffer_return
ISO Latin-1 文字、または ASCII 制御文字。
keysym_return
各修飾子を解釈した KeySym が入る
status_in_out
NULL 以外の場合、Xlib にプライベートな状態を記録します。
この状態は、作成処理を実装するために、XLookupString を呼び出した後も保持する必要があります。
XComposeStatus 構造体の作成は実装に依存します。
移植可能なプログラムは、この引数に NULL を渡す必要があります。
戻り値
バッファに格納された文字数
KeySym XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
内部 Xlib テーブルを使用し、指定された keycode のリスト内の index 位置に定義された KeySym を返します。
シンボルが定義されていない場合、NoSymbol を返します。
※非推奨
index
KeyCode ベクトルの要素
KeyCode XKeysymToKeycode(Display *display, KeySym keysym);
指定 KeySym を持つキーのキーコードを取得する。
どのキーコードにも定義されていない場合、ゼロを返します。
XRefreshKeyboardMapping(XMappingEvent *event_map);
保存されている修飾子とキーマップ情報を更新します。
通常、この関数は、request メンバーで MappingKeyboard または MappingModifier が指定された MappingNotify イベントが発生したときに呼び出します。

キーマッピングは Xlib の内部にキャッシュされます。
この情報がサーバーで変更された場合、Xlib 関数を呼び出してキャッシュを更新する必要があります。
void XConvertCase(KeySym keysym, KeySym *lower_return, KeySym *upper_return);
KeySym が大文字と小文字の変換の対象である場合、指定された KeySym の大文字と小文字の形式を返します。
対象外の場合は、指定された KeySym が、lower_return と upper_return の両方に返されます。
ラテン文字とキリル文字以外の KeySyms の変換のサポートは実装に依存します。
lower_return
小文字の KeySym
upper_return
大文字の KeySym
KeySym XStringToKeysym(char *string);
KeySym の名前から KeySym コードに変換します。

標準の KeySym 名は、<X11/keysymdef.h> の名前から "XK_" プレフィックスを削除することによって取得されます。
Xlib 標準の一部ではない KeySym もこの関数で取得できます。
この方法で利用できる KeySym のセットと、Xlib がそれらを取得するメカニズムは、実装に依存します。

KeySym 名が Host Portable Character Encoding にない場合、結果は実装に依存します。
指定された文字列が有効な KeySym に一致しない場合、NoSymbol を返します。
char *XKeysymToString(KeySym keysym);
KeySym から名前を取得します。
返された文字列は静的領域にあるため、変更しないでください。
返される文字列は、ホストポータブル文字エンコーディングです。
指定された KeySym が定義されていない場合、NULL を返します。
XRebindKeysym(Display *display, KeySym keysym, KeySym list[ ], int mod_count, unsigned char *string, int num_bytes);
クライアントの KeySym の意味を再バインドできます。
これは X サーバー内のキーを再定義するものではなく、長い文字列をキーに割り当てる簡単な方法を提供するだけです。
XLookupString は、適切な修飾キーのセットが押されたとき、および KeySym が変換に使用されたときに、この文字列を返します。テキスト変換は実行されません。
クライアントは、適切にエンコードされた文字列を提供する責任があります。
存在しない可能性のある KeySym を再バインドできることに注意してください。
keysym
再バインドする KeySym
list
修飾子として使用する KeySym のリスト
mod_count
list の数
string
XLookupString によって返される文字列
num_bytes
string のバイト数
キーボード制御
XChangeKeyboardControl(Display *display, unsigned long value_mask, XKeyboardControl *values);

typedef struct {
 int key_click_percent;
 int bell_percent;
 int bell_pitch;
 int bell_duration;
 int led;
 int led_mode;         /* LedModeOn, LedModeOff */
 int key;
 int auto_repeat_mode; /* AutoRepeatModeOff, AutoRepeatModeOn,
                          AutoRepeatModeDefault */
} XKeyboardControl
キーボードの制御を変更する。
コンソールに接続されているが、キーボードに直接接続されていないベルジェネレーターは、キーボードの一部であるかのように扱われます。
コントロールが検証および変更される順序はサーバーによって異なります。
エラーが生成された場合、コントロールのサブセットが変更されている可能性があります。
value_mask
変更する値のマスク。
KBBellPercent, KBBellPitch, KBBellDuration, KBLed, KBLedMode, KBKey, KBAutoRepeatMode
values
key_click_percent可能であれば、キークリックの音量を 0 (オフ) から 100 (大音量) までの範囲で設定します。
-1 に設定すると、デフォルトが復元されます。その他の負の値は BadValue エラーを生成します。
bell_percent可能であれば、ベルの基本音量を 0 (オフ) から 100 (大音量) までの範囲で設定します。
-1 に設定すると、デフォルトが復元されます。その他の負の値は BadValue エラーを生成します。
bell_pitch可能であれば、ベルのピッチ (Hz で指定) を設定します。
-1 に設定すると、デフォルトが復元されます。その他の負の値は BadValue エラーを生成します。
bell_duration可能であれば、指定されたベルの長さをミリ秒単位で設定します。
-1 に設定すると、デフォルトが復元されます。その他の負の値は BadValue エラーを生成します。
ledキーボード LED の番号 (1〜32)
led_modeLedModeOn, LedModeOff。
led が指定されている場合、指定 LED の状態を変更。
led が指定されていない場合、すべての LED の状態を変更。
keyオートリピートのキー
auto_repeat_modeAutoRepeatModeOn,AutoRepeatModeOff, AutoRepeatModeDefault
key が指定されている場合、そのキーのオートリピートモードを変更。
key が指定されていない場合、可能であればキーボード全体のグローバル auto_repeat_mode が変更され、キーごとの設定には影響しません。

各キーには、自動リピートするかどうかの個別のモードと、モードのデフォルト設定があります。
さらに、自動リピートを有効にするかどうかのグローバルモードと、そのモードのデフォルト設定があります。

自動繰り返しキーは、KeyPress イベントと KeyRelease イベントを交互に生成します。
キーが修飾子として使用される場合、自動リピート設定に関係なく、キーが自動リピートしないことが望ましい。
XGetKeyboardControl(Display *display, XKeyboardState *values_return);

typedef struct {
 int key_click_percent;
 int bell_percent;
 unsigned int bell_pitch, bell_duration;
 unsigned long led_mask;
 int global_auto_repeat;
 char auto_repeats[32];
} XKeyboardState;
キーボードの現在の制御値を XKeyboardState 構造体に返します。
values_return
led_maskLED が点灯しているかのフラグ。下位ビットから順に 1〜32。
global_auto_repeatオートリピートのグローバルモード。
AutoRepeatModeOn または AutoRepeatModeOff
auto_repeats各キーでオートリピートが有効か。
下位ビットから順。
XAutoRepeatOn(Display *display);
XAutoRepeatOff(Display *display);
キーボードのオートリピートをオン/オフします。
XBell(Display *display, int percent);
可能な場合、指定されたディスプレイ上のキーボードのベルを鳴らします。
指定された音量は、キーボードの基本音量を基準にしています。

パーセント引数が負でない場合にベルが鳴る音量は次のとおりです。
base - [(base * percent) / 100] + percent

パーセント引数が負の場合にベルが鳴る音量は次のとおりです。
base + [(base * percent) / 100]

ベルの基本音量を変更するには、XChangeKeyboardControl を使用します。
percent
ベルの音量。-100〜100。
範囲外の場合、BadValue エラーが発生します。
XQueryKeymap(Display *display, char keys_return[32]);
各キーが押されているかの状態を取得する。
デバイスのイベント処理が凍結している場合、デバイスの論理状態 (クライアントアプリケーションから見える) が物理状態よりも遅れる可能性があることに注意してください。
keys_return
各キーが押されているかのフラグが入る。下位ビットから順。
ポインタ制御
XWarpPointer(Display *display, Window src_w, Window dest_w, int src_x, int src_y,
    unsigned int src_width, unsigned int src_height, int dest_x, int dest_y);
ポインタの位置を移動。

この関数を使用すると、ユーザーがポインタをある位置から別の位置に瞬時に移動したかのように、イベントが生成されます。
アクティブなポインタグラブの confine_to ウィンドウの外にポインタを移動することはできないことに注意してください。
そうしようとしても、ポインタは confine_to ウィンドウの最も近い端までしか移動しません。
src_w
ソースウィンドウ or None。
ウィンドウの場合、src_w にポインタが含まれており、src の指定された四角形にポインタが含まれている場合にのみ実行される。
dest_w
宛先ウィンドウ or None。
None で現在位置からの相対移動。
ウィンドウの場合、ポインタを dest_w の原点を基準としたオフセット (dest_x、dest_y) に移動。
src_width,src_height
0 の場合、現在の幅・高さから src_x,src_y を引いた値。
int XSetPointerMapping(Display *display, unsigned char map[], int nmap);
ポインタボタンのマッピングを変更します。
成功すると、X サーバーは MappingNotify イベントを生成します。

※X サーバーが起動している間、永続的に維持され、すべてのクライアントで適用される。
※Xlib で扱えるボタンは最大 10 個。(XInput 時は除く)
map
各物理ボタンに対応する、論理ボタンの配列。
[0] がボタン1となる。
値が 0 で、ボタンを無効にする。配列内で同じ論理ボタン値を持つことはできません。
nmap
配列の数。
XGetPointerMapping が返す長さと同じである必要があります。そうでない場合は、BadValue エラーが発生します。
戻り値
MappingSuccess で成功。
変更されるボタンのいずれかが、論理的に押されている状態にある場合は、MappingBusy を返し、マッピングは変更しない。
int XGetPointerMapping(Display *display, unsigned char map_return[], int nmap);
ポインタボタンのマッピングを取得
map_return
ここに値が入る
nmap
配列の最大数。指定数までのデータが入る。
戻り値
実際にポインタ上にある、物理ボタンの数を返す (Xlib で扱える最大個数)
XChangePointerControl(Display *display, Bool do_accel, Bool do_threshold,
    int accel_numerator, int accel_denominator, int threshold);
ポインタのデバイスの移動方法を定義します。
do_accel
加速度を変更するか
do_threshold
しきい値を変更するか
accel_numerator,accel_denominator
ポインタの移動速度。num が分子、den が分母。
3,1 なら、3倍の速度になる。
小数点以下の値は丸められる可能性がある。
threshold
ポインタが一度にこのピクセルを移動した時のみ、加速を有効にする。
-1 でデフォルトを復元。
XGetPointerControl(Display *display, int *accel_numerator_return, int *accel_denominator_return, int *threshold_return);
ポインタの移動制御の値を取得
キーマップ
XDisplayKeycodes(Display *display, int *min_keycodes_return, int *max_keycodes_return);
指定されたディスプレイでサポートされている、最小キーコードと最大キーコードを返します。
最小値は 8 より少なくなることはなく、最大値は 255 を超えることはありません。
範囲内のすべてのキーコードが、対応するキーを持つ必要があるわけではありません。
KeySym *XGetKeyboardMapping(Display *display, KeyCode first_keycode, int keycode_count, int *keysyms_per_keycode_return);
first_keycode で始まる、指定された数の KeyCode に対応する KeySym のマッピングを返します。

(first_keycode + keycode_count - 1) が、XDisplayKeycodes によって返される max_keycode 以下であること。そうでない場合は、BadValue エラーが発生します。
first_keycode
キーコードの先頭。
XDisplayKeycodes によって返される min_keycode 以上である必要があります。そうでない場合は、BadValue エラーが発生します。
keycode_count
first_keycode からのキーコードの数
keysyms_per_keycode_return
一つのキーコードにおける KeySym の数が入る。
戻り値
確保された KeySym の配列。数は (keycode_count * keyms_per_keycode_return) となる。XFree() で解放する。
未使用部分は NoSymbol で埋められる。
XChangeKeyboardMapping(Display *display, int first_keycode, int keysyms_per_keycode, KeySym *keysyms, int num_codes);
first_keycode で始まる、指定された数の KeyCode の KeySym マッピングを変更します。
範囲外のキーコードは変更されません。

この関数は、MappingNotify イベントを生成します。
X サーバーがこのマッピングを解釈する必要はありません。これは、クライアントによる読み取りと書き込みのため、単に保存されるだけです。
first_keycode
キーコードの先頭。
XDisplayKeycodes によって返される min_keycode 以上である必要があります。そうでない場合は、BadValue エラーが発生します。
keysyms_per_keycode
一つのキーコードにおける KeySym の数を任意に指定できる
keysyms
(num_codes * keyms_per_keycode) 個の配列。
未使用部分は NoSymbol で埋める。
num_codes
キーコードの数
XModifierKeymap *XNewModifiermap(int max_keys_per_mod);

typedef struct {
  int max_keypermod;      /* 1つの修飾子の KeyCode 数 */
  KeyCode *modifiermap;   /* max_keypermod x 修飾子8個 */
} XModifierKeymap;
XModifierKeymap 構造体を作成
max_keys_per_mod
1つの修飾子に対する、KeyCode の数。
modifiermap
8個の修飾子 ([0] Shift [1] Lock [2] Ctrl, [3-7] Mod1〜5) ごとに、max_keys_per_mod 個分のキーコードが並んでいる。
0 で未定義。
Shift なら、Shift_L, Shift_R, NoSymbol... となる。
XFreeModifiermap(XModifierKeymap *modmap);
XModifierKeymap を解放
XModifierKeymap *XInsertModifiermapEntry(XModifierKeymap *modmap, KeyCode keycode_entry, int modifier);
指定された KeyCode を、指定された修飾子を制御するセットに追加し、結果の XModifierKeymap 構造体 (必要に応じて再確保される) を返します。
XModifierKeymap *XDeleteModifiermapEntry(XModifierKeymap *modmap, KeyCode keycode_entry, int modifier);
指定された修飾子を制御するセットから、指定された KeyCode を削除し、結果の XModifierKeymap 構造体へのポインタを返します。
int XSetModifierMapping(Display *display, XModifierKeymap *modmap);
修飾子として使用されるキー (存在する場合) の KeyCode のマップを指定します。
成功すると、X サーバーは MappingNotify イベントを生成し、XSetModifierMapping は MappingSuccess を返します。

X では、最大 8 つの修飾キーが使用できます。
XModifierKeymap 構造体の max_keypermod に 8 を超える値が指定されている場合、BadLength エラーが発生します。

XModifierKeymap 構造体の modifiermap メンバーには、8 セット x max_keypermod 個のキーコードが含まれており、Shift、Lock、Control、Mod1、Mod2、Mod3、Mod4、Mod5 の順で、各修飾子に対応する複数のキーコードが含まれています。
値 0 は無視されます。
さらに、キーコードは、min_keycode 〜 max_keycode の範囲内になければなりません。そうでない場合は、BadValue エラーが発生します。

X サーバーは、修飾子の変更方法に制限を課すことができます。
たとえば、特定のキーがハードウェアでアップトランジションを生成しない場合や、特定のキーで自動リピートを無効にできない場合、または複数の修飾子キーがサポートされていない場合です。
このような制限に違反すると、MappingFailed が返り、修飾子はいずれも変更されません。

修飾子に指定された新しい KeyCode が、現在定義されているものと異なっていて、その修飾子の (現在または新しい) キーが論理的に押されている場合、MappingBusy を返し、修飾子はどれも変更されません。
戻り値
MappingSuccess で成功。
MappingFailed で、制限に違反しているため失敗。
MappingBusy で、変更するキーが現在押されているため失敗。
XModifierKeymap *XGetModifierMapping(Display *display);
修飾子として使用されているキーを含む、確保された XModifierKeymap 構造体へのポインタを返します。
使用後に XFreeModifiermap を呼び出して解放する必要があります。
ゼロの値のみがある場合、その修飾子は無効になります。