XGetKeyboardControl(3) キーボード設定の操作とキーボード制御構造体

Other Alias

XChangeKeyboardControl, XAutoRepeatOn, XAutoRepeatOff, XBell, XQueryKeymap, XKeyboardControl

書式

XChangeKeyboardControl(display, value_mask, values)

      Display *display;

      unsigned long value_mask;

      XKeyboardControl *values;

XGetKeyboardControl(display, values_return)

      Display *display;

      XKeyboardState *values_return;

XAutoRepeatOn(display)

      Display *display;

XAutoRepeatOff(display)

      Display *display;

XBell(display, percent)

      Display *display;

      int percent;

XQueryKeymap(display, keys_return)

      Display *display;

      char keys_return[32];

引き数

display
X サーバへの接続を指定する。
keys_return
どのキーが押されたかを示すバイト配列が返される。 それぞれのビットはキーボードの 1 つのキーを表す。
percent
ベルの音量を指定する。 これは -100 以上 100 以下の範囲である。
value_mask
どの制御を変更するか指定する。 このマスクは有効な制御マスクビット値のビットごとの論理和を取ったもので ある。
values
マスクで 1 にセットされている各ビットに対して値を 1 つずつ指定する。
values_return
指定した XKeyboardState 構造体に現在のキーボード制御が返される。

説明

関数 XChangeKeyboardControl は、 XKeyboardControl 構造体で定義されるキーボード特性を制御する。 変更する値は引き数 value_mask を使って指定する。 XChangeKeyboardControl はエラー BadMatch, BadValue を起こすことがある。

関数 XGetKeyboardControl はキーボードの現在の制御値を XKeyboardState 構造体に返す。

関数 XAutoRepeatOn は、指定したディスプレイのキーボードのオートリピートを有効にする。

関数 XAutoRepeatOff は、指定したディスプレイのキーボードのオートリピートを無効にする。

関数 XBell は可能ならば、指定したディスプレイのキーボードのベルを鳴らす。 指定する音量はキーボードの基本音量に対する相対値である。 引き数 percent の値が -100 から 100 の範囲でない場合には、エラー BadValue となる。 引き数 percent の値が負でない場合には、ベルが鳴る音量は次のようになる。

base - [(base * percent) / 100] + percent

引き数 percent の値が負の場合には、ベルが鳴る音量は次のようになる。

base + [(base * percent) / 100]

ベルの基本音量を変更するには XChangeKeyboardControl を使う。

XBell はエラー BadValue を起こすことがある。

関数 XQueryKeymap は、キーボードの論理的状態を表すビットのベクトルを返す。 1 がセットされているビットは、対応するキーが現在押されていることを示す。 このベクトルは 32 バイトで表される。 バイト N (0から数える)は、キー 8N から 8N + 7 に対応するビットを持つ。 ここでバイト中の最下位ビットがキー 8N を表す。

デバイスのイベントが凍結されている場合、デバイスの論理的状態(クライア ントアプリケーションが見る)が物理的状態とずれることがある。

構造体

XKeyboardControl 構造体の内容を示す:

#define KBKeyClickPercent (1L<<0)
#define KBBellPercent (1L<<1)
#define KBBellPitch (1L<<2)
#define KBBellDuration (1L<<3)
#define KBLed (1L<<4)
#define KBLedMode (1L<<5)
#define KBKey (1L<<6)
#define KBAutoRepeatMode (1L<<7)
typedef struct {
     int key_click_percent;
     int bell_percent;
     int bell_pitch;
     int bell_duration;
     int led;
     int led_mode;       
     int key;
     int auto_repeat_mode;
} XKeyboardControl;

key_click_percent メンバは、可能ならばキークリック音の音量を 0 (無音) 以上 100 (最大音量)以下の値で設定する。 -1 を指定するとデフォルト値が復元される。 これ以外の負の値を指定した場合は、エラー BadValue となる。

bell_percent メンバは、可能ならば 0 (無音)以上 100 (最大音量)の間でベルの 基本音量を設定する。 -1 を指定するとデフォルト値が復元される。 これ以外の負の値を指定した場合は、エラー BadValue となる。 bell_pitch メンバは、可能ならばベルの音調(Hz で指定)を設定する。 -1 を指定するとデフォルト値が復元される。 これ以外の負の値を指定した場合は、エラー BadValue となる。 bell_duration メンバは、可能ならばベルの鳴る時間をミリ秒単位で設定する。 -1 を指定するとデフォルト値が復元される。 これ以外の負の値を指定した場合は、エラー BadValue となる。

led_mode メンバと led_mode メンバの両方が指定された場合、可能ならばそ の LED の状態が変更される。 led_mode メンバには LedModeOn あるいは LedModeOff が設定できる。 led_mode だけが指定されている場合、可能ならば全ての LED の状態が変更さ れる。 1 から数えて最大 32 個までの LED がサポートされている。 LED の標準的な実装は定義されていない。 led_mode メンバ無しで led メンバが指定された場合は、エラー BadMatch となる。

auto_repeat_mode メンバと key メンバの両方が設定されている場合、可能な らばそのキーに対する auto_repeat_mode モードが変更される(変更は AutoRepeatModeOn, AutoRepeatModeOff, AutoRepeatModeDefault のいずれかに従って行われる)。 auto_repeat_mode だけが指定された場合、可能ならばキーボード全体につい ての大域的な auto_repeat_mode が変更されるが、個別のキーについての設定 は影響を受けない。 auto_repeat_mode 無しでキーが指定された場合、エラー BadMatch となる。 それぞれのキーはオートリピートすべきかどうかを示す個別のモードと、この モードのデフォルトの設定を持っている。 さらに、オートリピートを有効にすべきかどうかを示す大域的なモードと、こ のモードのデフォルトの設定がある。 大域的なモードが AutoRepeatModeOn ならば、キーは個別のオートリピートモードに従う。 大域的なモードが AutoRepeatModeOff ならば、全てのキーはオートリピートしてはならない。 オートリピートしているキーは KeyPress イベントと KeyRelease イベントを交互に生成する。 あるキーをモディファイアとして使う場合は、オートリピートの設定に関わら ず、そのキーはオートリピートさせないことが望ましい。

XKeyboardState 構造体の内容を以下に示す。

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;

LED については、led_mask メンバの最下位ビットが 1 番目の LED に対応し、 led_mask メンバ中で 1 にセットされているビットは、その LED が点灯して いることを示す。 global_auto_repeat メンバには AutoRepeatModeOn または AutoRepeatModeOff を設定できる。 auto_repeats メンバはビットのベクトルである。 それぞれのビットに 1 が設定されていると、対応するキーのオートリピート が有効であることを示す。 このベクトルは 32 バイトで表される。 バイト N (0から数える)は、キー 8N から 8N + 7 に対応するビットを持つ。 ここでバイト中の最下位ビットがキー 8N を表す。

返り値

BadMatch
引き数や引き数の組は正しい型・範囲を持っているが、そのリクエストが要求する 他の条件に適合できなかった。
BadValue
指定された数値の中にリクエストの許容範囲を越えているものがある。引き数 に対して特定の範囲が指定されていない限り、引き数の型で定義されている全 ての範囲が許される。選択肢として定義されている引き数はこのエラーを起こ すことがある。