[BACK]Return to keymap.doc CVS log [TXT][DIR] Up to [jp.NetBSD.org] / othersrc / mgl / mgl2 / memo

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 のコードを得ることが
できるようになります。

( 設定しない場合、'-' が返ります。)