XChangeKeyboardMapping(3X11) — NEWS-OS Programmer’s Manual
名称
XChangeKeyboardMapping, XGetKeyboardMapping, XDisplayKeycodes, XSetModifierMapping, XGetModifierMapping, XNewModifiermap, XInsertModifiermapEntry, 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;
引数
displayX サーバへのコネクションを指定します。
first_keycode変更されるか 、または返される最初の KeyCode を指定します。
keycode_count
返される KeyCode 数を指定します。
keycode_entry
KeyCode を指定します。
keysymsKeySyms 配列を指すポインタを指定します。
keysyms_per_keycode
1 KeyCode についての KeySyms 数を指定します。
keysyms_per_keycode_return
1 KeyCode についての KeySyms 数を返します。
max_keys_per_mod
マップのモディファイに事前に割り当てられる KeyCode エントリ数を指定しま す。
max_keycodes_return
KeyCode 最大数を返します。
min_keycodes_return
KeyCode 最小数を返します。
modifierモディファイアを指定します。
modmapXModifierKeymap 構造体を指すポインタを指定します。
num_codes変更する KeyCode の数を指定します。
解説
XChangeKeyboardMapping 関数は、 first_keycode で始まる指定された数の KeyCode について、シン ボルを定義します。 この範囲外の KeyCode のシンボルは変更されません。 keysyms の要素数は、以下のように求めなければなりません。
num_codes ∗ keysyms_per_keycode
指定された first_keycode は、 XDisplayKeycodes が返す min_keycode 以上でなければなりません。さもなければ、 BadValue エラーが生じます。 さらに、次の式は XDisplayKeycodes が返す max_keycode 以下でなければなりません。さもなければ、 BadValue エラーが生じます。
first_keycode + num_codes − 1
KeyCode K ( 0 からカウントする)に対する KeySym 番号 N ( 0 からカウ ントする)は、 keysyms 中に以下のインデックスをもちます。
(K − first_keycode) ∗ keysyms_per_keycode + N
指定された keysyms_per_keycode を、希望のシンボルすべてを保持するのに 十分な大きさであるように、クライアントが任意に選べます。 NoSymbol という特別な KeySym 値を使用して、各 KeyCode の未使用の要素を充填しな ければなりません。 NoSymbol が、 KeyCode の有効リストの末尾以外の位置にあっても、間違いではありま せん。 XChangeKeyboardMapping は、 MappingNotify イベントを発生します。 X サーバがこのマッピングを解釈する必要はありません。 このマッピングは、クライアントによる読取り、または書込みのために ストアされるにすぎません。 XChangeKeyboardMapping は、 BadAlloc および BadValue エラーを生じることがあります。 XGetKeyboardMapping 関数は、 first_keycode で始まる指定された数の KeyCode について、シン ボルを返します。 first_keycode で指定された値は、 XDisplayKeycodes が返す min_keycode 以上でなければなりません。さもなければ、 BadValue エラーが生じます。 さらに、下式は XDisplayKeycodes が返す max_keycodes 以下でなければなりません。
first_keycode + keycode_count − 1
これがあてはまらなければ、 BadValue エラーが生じます。 KeySyms リストの要素数は、下式で求めます。
keycode_count ∗ keysyms_per_keycode_return
KeyCode K ( 0 からカウントする) の KeySym 数 N ( 0 からカウントす る) は、リストに以下のインデックスをもちます。
(K − first_code) ∗ keysyms_per_code_return + N
X サーバは、要求されたシンボルすべてを通知するのに十分な大きさの keysyms_per_keycode_return 値を任意に選びます。 NoSymbol という特別な KeySysm 値を使用し、各 KeyCode の未使用の要素を充填しま す。 XGetKeyboardMapping により返された記憶領域を解放するには、 XFree を使用します。 XGetKeyboardMapping は、 BadValue エラーを生じることがあります。 XDisplayKeycodes 関数は、指定されたディスプレイがサポートする min_keycodes および max_keycodes を返します。 返される min_keycodes が 8 より小さいことはなく、 max_keycodes が 255 より大きいことはありません。 この範囲の KeyCodes すべてが対応するキーをもつ必要はありません。 XSetModifierMapping 関数は、モディファイアとして使用するキー(もしあれば)の KeyCodes を 指定します。 成功すれば、 X サーバは MappingNotify イベントを発生し、 XSetModifierMapping は、 MappingSuccess を返します。 X では、 8 つまでのモディファイアキーを使用できます。 XModifierKeymap 構造体で 8 つ以上のキーが指定されると、 BadLength エラーが生じます。 XModifierKeymap 構造体のメンバであるモディファイアマップには、 8 組の max_keypermod KeyCodes があります。 つまり、 Shift、 Lock、 Control、 Mod1、 Mod2、 Mod3、 Mod4、 Mod5 の順に、各モディファイアにつき 1 組の max_keypermod KeyCodes を 含んでいます。 各セットにおいて 0 でない値をもつ KeyCodes だけが 意味をもち 0 をもつ KeyCode は無視されます。 さらに、0 でない値をもつすべての KeyCodes は、 Display 構造体の min_keycode および max_keycode で、指定される範囲内になけれ ばなりません。 さもなければ、 BadValue エラーが生じます。 マップ全体に KeyCode が 2 回生じることはありません。 さもなければ、 BadValue エラーが生じます。 X サーバは、モディファイアの変更方法について制限を課します。 たとえば、 ある種のキーがハードウェアに変化を生じないか、ある種のキーでオートリ ピートを使用不可能にできないか、または複数のモディファイアキーがサポ ートされない場合、モディファイアの変更方法について制限を課します。 このような制限に違反すれば、状態応答は MappingFailed となり、どのモディファイアも変更されません。 モディファイアに対して指定された新しい KeyCodes が現在定義されている ものと異なり、そのモディファイア用のどの(現在の、または新しい)キー も論理的にダウン状態にある場合、 XSetModifierMapping は、 MappingBusy を返し、どのモディファイアも変更されません。 XSetModifierMapping は、 BadAlloc および BadValue エラーを生じることがあります。 XGetModifierMapping 関数は、モディファイアとして使用中のキーを含む、新たに生成された XModifierKeymap 構造体を指すポインタを返します。 この構造体は使用後 XFreeModifiermap を呼び出すことにより解放しなければなりません。 モディファイアセットに 0 しかない場合、このモディファイアは使用できま せん。 XNewModifiermap 関数は、後に使用するため XModifierKeymap 構造体を指すポインタを返します。 XInsertModifiermapEntry 関数は、指定されたモディファイアを制御するセットに指定された KeyCode を追加し、その結果として生じた必要な分だけ拡張された XModifierKeymap 構造体を指すポインタを返します。 XDeleteModifiermapEntry 関数は、指定されたモディファイアを制御するセットから指定された KeyCode を削除し、その結果として生じた XModifierKeymap 構造体を指すポインタを返します。 XFreeModifiermap 関数は、指定された XModifierKeymap 構造体を指すポインタを返します。
構造体
XModifierKeymap 構造体は、以下のような構造をしています。
typedef struct {
int max_keypermod;/∗ This server’s max number of keys per modifier ∗/
KeyCode ∗modifiermap;/∗ An 8 by max_keypermod array of the modifiers ∗/
} XModifierKeymap;
診断
BadAlloc サーバが要求されたリソース、またはサーバメモリの割当てに失敗した。
BadValue ある数値が許容範囲を超えた。引数の範囲が明示されない限り、引数の型に よって決まる最大の範囲まで指定可能です。オルタネイト選択形式の引数も、 このエラーを生じることがあります。
関連事項
XFree(3X11) XSetPointerMapping(3X11)
Xlib − C Language X Interface
NEWS-OSRelease 4.1C