File: [jp.NetBSD.org] / othersrc / mgl / mgl2 / memo / keymap.doc (download)
Revision 1.6, Mon Jan 8 14:01:55 2001 UTC (23 years, 2 months ago) by suz
Branch: MAIN
CVS Tags: HEAD, ALPHA_020_PRE6, ALPHA_020_PRE4, ALPHA_020_PRE3, ALPHA_020 Changes since 1.5: +7 -0
lines
o keymap.c
NetBSD/hpcmips 等で CONTRANST 調整等の 操作を keymap にいれるのは
困難だということがわかったので、MENU + 英字でオペレーションを
定義。( MENU + XXX は、MGL ローカルな定義 として 機種依存性をなくす
かわりに、再定義できないことに する。)
MENU + [q-o] : console 切替え (1-9 に対応)
MENU + 'c' : contrast_up
MENU + 'v' : contrast_down
MENU + 'b' : brightness_up
MENU + 'n' : brightness_down
MENU + 'm' : backlight_toggle
( ちなみに、刻印どおりのオペレーションをいれること
とは競合しないはずなんで、これを使わなくてはいけないという
ことではない。)
|
keymap についての方法を変更をだいたい完了したので、ここらで整理
通常は、RAW モードでキーを取得し、MGL 内部で変換を行います。
そのため、若干 OS の keymap と違う動きになります。
また、キーマップは、OS で定義された ものを自動的に取得します。
キーコードの変換は次のステップになります。
1) console から 得られた RAW キーコード を 0 - 0x7f に変換し、さらに
MGL の RAW キーコードに変換します。
MGL の RAW キーコード = mgl_raw_keymap[ OS の キーコード ]
この変換をするところで、いくつかの処理を行います。
1-1) MENU キー + [1-4] , MENU キー + カーソルキーの処理
MENU キー + 1: (ドラッグ中でなければ) mgl_mouse_shift = 0;
MENU キー + 2: (ドラッグ中でなければ) mgl_mouse_shift = 1;
MENU キー + 3: (ドラッグ中でなければ) mgl_mouse_shift = 2;
MENU キー + 4: emcons の場合 マウス表示
MENU キー + カーソル: マウスを +8 移動
MENU キー + SHFIT + カーソル: マウスを +1 移動
MENU キー + SPACE : マウスを down/up
MENU キー + [q-o] : console 切替え (1-9 に対応)
MENU キー + 'c' : contrast_up
MENU キー + 'v' : contrast_down
MENU キー + 'b' : brightness_up
MENU キー + 'n' : brightness_down
MENU キー + 'm' : backlight_toggle
1-2) switch_window/switch_focus キーシンボルへの変換。
いままで F9/F10 キーに static に割り当てていましたが、
alt + F9 等 Modifier で組み合わせることができるように
なりました。( RAW モードでも 効くために 特別にこの
レベルで変換します。)
1-3) OS 依存の処理
次のようなキーシンボルに対する処理を行います。
"brightness_up","brightness_down",
"contrast_up", "contrast_down",
"power_off","dial",
"play","stop","record"
1-4) オートリピートの処理
OS の RAW モードがオートリピートを持っていない場合、
MGL 内部でオートリピートが行われます。
1-[123]) の処理も オートリピートの対象になります。
2) (内部)キーシンボルへの変換
MGL の (内部)キーシンボル
= mgl_keymap[MGL の RAW キーコード][ シフト状態 ]
シフト状態には、
0: NORMAL
1: SHIFTED
2: ALTED
の3つがあります。
ALTED は、MGL_SKM_ALT/MGL_SKM_RALT が押された状態で、
(内部)キーシンボルが定義されているときのみこの状態になります。
SHIFTED は、MGL_SKM_SHIFT/MGL_SKM_RSHIFT が押された状態。
3) キーコードへの変換
実は(内部) キーシンボルが、そのまま get_key() に渡されるわけでは
ありません。mgl2.h で定義されているもの以外は、
アプリケーションが、mgl_set_keysym(名前、コード) を使って、
キーシンボルの コードを定義したときのみ取得できるようになります。
対象になるシンボルの名前は、
"F13", "F14", "F15", "F16", "F17", "F18",
"F19", "F20", "F21", "F22", "F23", "F24",
"break", "pause", "print", "hanzen", "kanji", "henkan",
"KP_0", "KP_1", "KP_2", "KP_3", "KP_4", "KP_5",
"KP_6", "KP_7", "KP_8", "KP_9",
"KP_plus", "KP_minus", "KP_mult", "KP_div",
"KP_delete", "KP_end",
"muhenkan", "numlock", "scrlock", "select",
"KP_up", "KP_down", "KP_left", "KP_right",
"KP_pageup", "KP_pagedown", "KP_begin",
"KP_return", "KP_execute", "KP_home", "KP_insert",
です。( 将来 追加される可能性があります。)
コードが定義されていない場合、KP_up 等、デフォルトのコード
が割り当てられているものもありますが、割り当てられていない
ものもあります。
上で出て来た "brightness_up","brightness_down",なども
取得できる場合がありますが、推奨しません。
これらの変換が終ったあと、Ctrl の処理を行います。
MGL_SKM_CTRL または MGL_SKM_RCTRL が押されていて、コードが
0 - 0x7f の間の場合、0x1f で AND します。
4) モデファイヤー情報の付加
EXTRANSLATED モードの場合は、さらに モデファイヤー情報を
付加します。
取得できるモデファイヤーは、
MGL_SKM_SHIFT, MGL_SKM_CTRL, MGL_SKM_ALT, MGL_SKM_MENU
です。
モデファイヤー自体の ON/OFF の場合キーコードがないので、
MGL_SKM_NOTICE が付加されます。
EXTRANSLATED モードに対して MGL_SKM_EXMODIFIER のオプションを
指定することができます。
この場合、さらに次のモデファイヤーも取得することができます。
MGL_SKM_RSHIFT, MGL_SKM_RCTRL, MGL_SKM_RALT, MGL_SKM_RMENU
です。
捕捉)
これらの処理は、X 版/ console 版/ MGL クライアントで共通です。
MGL RAW コードの互換性について。
MGL では、キーマップを分析して、
通常の配列のキーボードであれば、raw_keyboard.doc に記述されたコード
の通りになるようにしています。
ただし、キーマップを自由に変更した場合、MGL RAW コードの互換性が犠牲にな
る場合があります。また、PSION などでは ないキーがそもそも存在します。
--- 以下の定義方法は 既に使われなくなりつつあります。
keymap は割と自由に定義できますが、MGL でサポートしている
RAW モードの key しか対象としません。
したがって入力できるキーが 通常の場合より少なくなります。
このドキュメントでは、keymap の定義の仕方を説明します。
0) デフォルト
日本語キーボードで、なにもキーを変換していない状態と同じになります。
1) 簡易指定
環境変数 MGL_KEYMAP に 次のキーワードを 空白で区切って いれます。
jp -- 日本語キーボードの指定
us -- 英語キーボードの指定
swapctrlcaps -- CTRL キー と CAPSLOCK キー を入れ換えます
swapdelbs -- DEL キー と BS キー を入れ換えます。
localtranslate -- 通常のモードでも keymap を使用します。
注意)
パーザが適当なので、制限事項があります。
jp または us は 最初に指定してください。また jp と us を同時に指定したときの
動作は定義されていません。
swapctrlcaps, swapdelbs は、1 回だけ jp|us の後に指定してください。
2) フル設定
環境変数 MGL_KEYMAP に 次のキーワードを指定します。
loadkeymap
MGL_DIR/keymap ( アーキティクチャによっては、MGL_DIR/keymap.機種名 )
をロードします。
3) keymap のフォーマット
基本的に設定を行なうスクリプトですので、記述の順序が重要です。
( 先に書くべきものから 説明します。)
なお、空白行 および #から先のカラムは無視します。
keyboardtype = jp|us
キーボードタイプを指定
keycode キーコード = シンボル1 シンボル2
キーコードが発生するコードを 指定します。
シンボル1 は、モデファイヤーなしで キーを 押したときの コード
シンボル2 は、SHIFT/CAPS 状態での コード
CTRL 状態では、0x7f より小さいコードに対して & 0x1f の動作を行ないます。
シンボルのフォーマットは、付録を参照してください。
swap キーコード キーコード
キーコードに対する keymap を入れ換えます。
( キーコード自体を入れ換えるわけではない)
この時点で定義された keymap を入れ換える動作をします。
付録 A
[a-zA-Z0-9_] はそのコード
シンボル コード
escape '\e'
exclam '!'
quotedbl '"'
numbersign '#'
dollar '$'
percent '%'
ampersand '&'
asterisk '*'
apostrophe '\''
parenleft '('
parenright ')'
asciitilde '~'
minus '-'
plus '+'
equal '='
asciicircum '^'
asciitilde '~'
backspace '\b'
tab '\t'
at '@'
bracketleft '['
bracketright ']'
braceleft '{'
braceright '}'
return '\r'
semicolon ';'
colon ':'
comma ','
less '<'
period '.'
greater '>'
slash '/'
question '?'
space ' '
bar '|'
backslash '\\'
underscore '_'
grave '`'
capslock MGL_SKM_CAPS
shift MGL_SKM_SHIFT
alt MGL_SKM_ALT
ctrl MGL_SKM_CTRL
menu MGL_SKM_MENU ( たぶん ミ田キーです。)
r_shift MGL_SKM_RSHIFT
r_alt MGL_SKM_RALT
r_ctrl MGL_SKM_RCTRL
r_menu MGL_SKM_RMENU ( たぶん 右 ミ田キーです。)
up MK_UP
down MK_DOWN
left MK_LEFT
right MK_RIGHT
pageup MK_PAGE_UP
pagedown MK_PAGE_DOWN
insert MK_INS
delete 0x7f
delete_alt MK_DEL
home MK_HOME
end MK_END
F1 MK_F1
F2 MK_F2
F3 MK_F3
F4 MK_F4
F5 MK_F5
F6 MK_F6
F7 MK_F7
F8 MK_F8
F9 MK_F9
F10 MK_F10
F11 MK_F11
F12 MK_F12
none なし
付録 B 拡張されたシンボル
ファクンクションキー
F13 - F24
キーバッド
KP_0 - KP_9 KP_plus KP_minus KP_mult KP_div
KP_delete KP_insert KP_home KP_end KP_up KP_down KP_left KP_right
KP_pageup KP_pagedown KP_begin KP_return KP_execute
その他
break pause print hanzen kanji nuhenkan numlock scrlock select
これらを get_key() で得るためには、コードを割り当てる必要があります。
例:
mgl_set_keysym("KP_minus", MK_V0);
こうすることにより、KP_minus が押されたときに MK_V0 のコードを得ることが
できるようになります。
( 設定しない場合、'-' が返ります。)