XInsertModifiermapEntry(3) キーボードのエンコーディングの操作、キーボードのエンコーディングを表す構造体

Other Alias

XChangeKeyboardMapping, XGetKeyboardMapping, XDisplayKeycodes, XSetModifierMapping, XGetModifierMapping, XNewModifiermap, XDeleteModifiermapEntry, XFreeModifierMap XModifierKeymap

書式

XChangeKeyboardMapping(display, first_keycode, keysyms_per_keycode, keysyms, num_codes)

      Display *display;

      int first_keycode;

      int keysyms_per_keycode;

      KeySym *keysyms;

      int num_codes;

KeySym *XGetKeyboardMapping(display, first_keycode, keycode_count,

                            keysyms_per_keycode_return)

      Display *display;

      KeyCode first_keycode;

      int keycode_count;

      int *keysyms_per_keycode_return;

XDisplayKeycodes(display, min_keycodes_return, max_keycodes_return)

        Display *display;

        int *min_keycodes_return, *max_keycodes_return;

int XSetModifierMapping(display, modmap)

        Display *display;

        XModifierKeymap *modmap;

XModifierKeymap *XGetModifierMapping(display)

      Display *display;

XModifierKeymap *XNewModifiermap(max_keys_per_mod)

        int max_keys_per_mod;

XModifierKeymap *XInsertModifiermapEntry(modmap, keycode_entry, modifier)

     XModifierKeymap *modmap;

     KeyCode keycode_entry;

     int modifier;

XModifierKeymap *XDeleteModifiermapEntry(modmap, keycode_entry, modifier)

     XModifierKeymap *modmap;

     KeyCode keycode_entry;

     int modifier;

XFreeModifiermap(modmap)

        XModifierKeymap *modmap;

引き数

display
X サーバへの接続を指定する。
first_keycode
変更される最初の KeyCode, または返される最初の KeyCode を指定する。
keycode_count
返される KeyCode の数を指定する。
keycode_entry
KeyCode を指定する。
keysyms
KeySym の配列を指定する。
keysyms_per_keycode
KeyCode あたりの KeySym の数を指定する。
keysyms_per_keycode_return
KeyCode あたりの KeySym の数が返される。
max_keys_per_mod
マップ中で予めモディファイアに割り当てられた KeyCode のエントリ数を指 定する。
max_keycodes_return
KeyCode の最大数が返される。
min_keycodes_return
KeyCode の最小数が返される。
modifier
モディファイアを指定する。
modmap
XModifierKeymap 構造体を指定する。
num_codes
変更する KeyCode の数を指定する。

説明

関数 XChangeKeyboardMapping は、 first_keycode から始まる指定した数の KeyCode に対するシンボルを定 義する。 範囲外の KeyCode に対するシンボルは変更されない。 keysym 中の要素数は次の数でなければならない。

num_codes * keysyms_per_keycode

指定した first_keycode は XDisplayKeycodes が返す min_keycode 以上でなければならない。そうでない場合はエラー BadValue となる。 さらに、以下の式は XDisplayKeycodes が返す max_keycode 以下でなければならない。そうでない場合はエラー BadValue となる。

first_keycode + num_codes - 1

0 から数えて番号 N である、KeyCode K に対するKeySym は、keysym 内で 以下の式のインデックスを持つ。このインデックスは 0 から数える。

(K - first_keycode) * keysyms_per_keycode + N

全ての必要なシンボルを保持する十分な大きさであれば、クライアントは指定 した keysyms_per_keycode の数を任意に選択できる。 特別な KeySym 値である NoSymbol は、個別の KeyCode の未使用の要素を埋めるために使う。 NoSymbol は、実際に有効な KeyCode リストの最後でない位置に現われてもよい。 XChangeKeyboardMappingMappingNotify イベントを生成する。

X サーバがこのマッピングを解釈する必要はない。 これはクライアントに読み書きさせるために保存しているだけである。

XChangeKeyboardMapping はエラー BadAlloc, BadValue を起こすことがある。

関数 XGetKeyboardMapping は、first_keycode 番目から始まる指定した数の KeyCode に対するシンボル を返す。 first_keycode で指定する値は、 XDisplayKeycodes が返す min_keycode 以上でなければならない。 そうでない場合は、エラー BadValue となる。 さらに次に示す式は XDisplayKeycodes が返す max_keycode 以下でなければならない。

first_keycode + keycode_count - 1

そうでない場合には、エラー BadValue となる。 KeySym リスト中の要素数は次の式で表される。

keycode_count * keysyms_per_keycode_return

0 から数えて番号 N である、KeyCode K に対する KeySym は、keysym リスト内で 以下の式のインデックスを持つ。このインデックスは 0 から数える。

(K - first_code) * keysyms_per_code_return + N

X サーバは、全ての必要なシンボルを報告するために十分な大きさである任意 の keysyms_per_keycode を選択する。 特別な KeySym 値である NoSymbol は、個別の KeyCode の未使用の要素を埋めるために使う。 XGetKeyboardMapping が返すメモリを解放するには、 XFree を使用すること。

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

関数 XDisplayKeycodes は、指定したディスプレイがサポートしている最小のキーコードと最大のキー コードを返す。 返される最小の KeyCode の数は 8 より小さいことはなく、返される最大の KeyCode の数は 255 より大きいことはない。 この範囲の全ての KeyCode が対応するキーを持つ必要はない。

関数 XSetModifierMapping はモディファイアとして使うキー(もしあれば)の KeyCode を指定する。 成功した場合、X サーバは MappingNotify イベントを生成し、 XSetModifierMappingMappingSuccess を返す。 X サーバは多くても 8 つのモディファイアキーしか認めない。 XModifierKeymap 構造体で 8 個より多いモディファイアキーが指定されている場合、エラー BadLength となる。

XModifierKeymap 構造体の modifiermap メンバは、max_keypermod 個の KeyCode を 8 組持ち、 各モディファイアに対するキーコードは Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, Mod5 の順に並んでいる。 それぞれの集合のうち、0 でない KeyCode だけが意味を持ち、KeyCode が 0 で あるものは無視される。 さらに、0 でない全ての KeyCode は Display 構造体の min_keycode と max_keycode で指定される範囲でなければならない。 そうでない場合は、エラー BadValue となる。

X サーバはモディファイアの変更の仕方を制限することができる。 このような制限は例えば、あるキーが離された状態変化をハードウェア的に 生成できない場合、あるキーについてオートリピートを無効にできない場合、 複数個のモディファイアキーがサポートされていない場合等に行われる。 このような制限が破られた場合は、返されるステータスは MappingFailed であり、どのモディファイアも変更されない。 モディファイアに対して指定された新しい KeyCode が 現在定義されているモディファイアと異なり、そのモディファイアに対する (現在の、あるいは新しい)キーのいずれかが論理的に押された状態にある場合 は、 XSetModifierMappingMappingBusy を返し、どのモディファイアも変更されない。

XSetModifierMapping はエラー BadAlloc, BadValue を起こすことがある。

関数 XGetModifierMapping は新しく生成された XModifierKeymap 構造体へのポインタを返す。この構造体はモディファイアとして使用されるキー を含む。 この構造体を使い終わったら XFreeModifiermap を呼び出して解放しなければならない。 集合内でいずれかのモディファイアに対する値として 0 が現われた場合、そ のモディファイアは無効となる。

関数 XNewModifiermap は、後で利用するための XModifierKeymap 構造体へのポインタを返す。

関数 XInsertModifiermapEntry は指定したモディファイアを制御する集合に指定された KeyCode を追加し、 その結果得られた XModifierKeymap 構造体(必要に応じて拡張される)を返す。

関数 XDeleteModifiermapEntry は指定したモディファイアを制御する集合から指定された KeyCode を削除し、 その結果得られた XModifierKeymap 構造体へのポインタを返す。

関数 XFreeModifiermap は指定された XModifierKeymap 構造体を解放する。

構造体

XModifierKeymap 構造体の内容を示す:

typedef struct {
     int max_keypermod;  
     KeyCode *modifiermap;
} XModifierKeymap;

返り値

BadAlloc
要求されたリソースやサーバメモリの割り当てにサーバが失敗した。
BadValue
指定された数値の中にリクエストの許容範囲を越えているものがある。引き数に対 して特定の範囲が指定されていなければ、引き数の型で定義されている全ての範 囲が許される。選択肢として定義されている引き数はこのエラーを起こすことが ある。