em1keypc用のoyayubiwm編集メモ。

(2007年10月31日0:40:21追記)
 いまから、141Fさんの記事「em1keypc の設定は難しい。」にトラックバックさせていただきます。
 さきにコメント&トラバできなかった原因は、サーバ側の問題ではなくて、うちの宅内ルータがパケット詰まりを起こしていたことが原因っぽいです……orz。


 141Fさんのところにコメントを書こうと思ったものの、なぜかサーバが重いらしく応答が鈍くて……途中であきらめてしまいましたorz。
 #トラックバックURLも表示できなかったので、ひとまずトラックバックせずに書いています。


 とりあえず、ここにチラッと「新しく文字を定義するためのポイント」を書いておきます。
 小梅ではシフト方法がNICOLA(親指シフト)と同じなので、ポイントさえつかめば、オリジナルのoyayubiwmから編集するほうがよいかもしれません。
 #asukawmを編集しても同じことはできるのですが、飛鳥でしか使わない文字をいくつか定義してしまっているので、自由度が減ってしまうのは微妙かも……。


 基本的に、em1keyスクリプトで打ちたい文字を定義するには、「func関数(キーコードに縛られない関数)のうち、使いたい番号の関数に適当な名前をdefineする」→「defineしたfunc関数に対して、実際にやるべきことをfunc TABLE_FUNCで書き込む」の2操作が必要です。


 (オリジナルを改造して作成した)asukawmを例にとって説明します。
http://www.eurus.dti.ne.jp/~yfi/nazodl.html#asukawm
 要所に「飛鳥カナ配列」という文字がついているので、テキストエディタの検索機能で追いかけると楽かもです。


 まずははじめの定義……449行目〜473行目。

define	_kana_BS	0xee	# [BS]
define	_kana_ESC	0xef	# [ESC]
define	_kana_NOP	0xf0	# 何もしない
define	_kana_ORG	0xf1	# 元のキーのコードを発行する
define	_kana_SHORG	0xf2	# 元のキーのコードを SHIFT 付きで発行する



#------------------------------------------------------------------------------
# 飛鳥カナ配列のために新しく定義する必要がある関数群
#------------------------------------------------------------------------------
define	_kana_PERC	0xf3	# % ★未定義 f3
define	_kana_AMPER	0xf4	# & ★未定義 f4
define	_kana_STAR	0xf5	# * ★未定義 f5
define	_kana_EXCLA	0xf6	# ! ★未定義 f6
define	_kana_DOT	0xf7	# ・ ★未定義 f7
define	_kana_PLUS	0xf8	# + ★未定義 f8
define	_kana_LMBRA	0xf9	# } ★未定義 f9
define	_kana_RMBRA	0xfa	# { ★未定義 fa
define	_kana_LTBRA	0xfb	# < ★未定義 fb
define	_kana_RTBRA	0xfc	# > ★未定義 fc
define	_kana_MINUS	0xfd	# ─ ★未定義 fd
#------------------------------------------------------------------------------
# 飛鳥カナ配列のために新しく定義する必要がある関数群
#------------------------------------------------------------------------------

 オリジナルには【define _kana_SHORG 0xf2】までが定義されていて、それ以降は空いています。
 ほかのfunc関数はどれが使われているのかはよくわからないのでいじっていませんが、少なくとも0xf3〜0xffまでは使えるはずです。
 飛鳥のこの定義では、いろいろと配列をはしょった上で0xf3〜0xfdを(それぞれ使いやすそうな名前を付けて)予約しています。


 次は、実際の挙動を書いています……1904行目〜2077行目。

#------------------------------------------------------------------------------

func TABLE_FUNC _kana_NOP
	RETURN	0
endfunc

func TABLE_FUNC _kana_SHORG
	SETMODIFIER	MOD_SHIFT
	SENDVAR	_KB_KEYCODE
#	ifsw CSW_COUNT
#		CALL	_subCount1
#	endif
	RETURN	0
endfunc

func TABLE_FUNC _kana_ORG
	SENDVAR	_KB_KEYCODE
#	ifsw CSW_COUNT
#		CALL	_subCount1
#	endif
	RETURN	0
endfunc



#------------------------------------------------------------------------------
# 飛鳥カナ配列のために新しく定義する必要がある関数群 ここから
#------------------------------------------------------------------------------

##define	_kana_PERC		0xf3	# % ★未定義 f3
func TABLE_FUNC _kana_PERC
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	'5'		# % ★未定義 f3
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_AMPER		0xf4	# & ★未定義 f4
func TABLE_FUNC _kana_AMPER
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	'6'		# & ★未定義 f4
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_STAR		0xf5	# * ★未定義 f5
func TABLE_FUNC _kana_STAR
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_APOSTROPHE		# * ★未定義 f5
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_EXCLA		0xf6	# ! ★未定義 f6
func TABLE_FUNC _kana_EXCLA
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	'1'		# ! ★未定義 f6
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_DOT		0xf7	# ・ ★未定義 f7
func TABLE_FUNC _kana_DOT
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_SLASH		# ・ ★未定義 f7
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_PLUS		0xf8	# + ★未定義 f8
func TABLE_FUNC _kana_PLUS
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_SEMICOLON		# + ★未定義 f8
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_LMBRA		0xf9	# } ★未定義 f9
func TABLE_FUNC _kana_LMBRA
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_RBRACKET		# } ★未定義 f9
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_RMBRA		0xfa	# { ★未定義 fa
func TABLE_FUNC _kana_RMBRA
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_LBRACKET		# { ★未定義 fa
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_LTBRA		0xfb	# < ★未定義 fb
func TABLE_FUNC _kana_LTBRA
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_COMMA		# < ★未定義 fc
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_RTBRA		0xfc	# > ★未定義 fc
func TABLE_FUNC _kana_RTBRA
#--------
	SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_PERIOD		# > ★未定義 fc
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc


##define	_kana_MINUS		0xfd	# ─ ★未定義 fd
func TABLE_FUNC _kana_MINUS
#--------
	### SETMODIFIER	MOD_SHIFT
	SENDKEY	VK_HYPHEN		# ─ ★未定義 fd
#--------
	ifsw CSW_COUNT
		CALL	_subCount1
	endif
	RETURN	0
endfunc

#------------------------------------------------------------------------------
# 飛鳥カナ配列のために新しく定義する必要がある関数群 ここまで
#------------------------------------------------------------------------------

 【func TABLE_FUNC _kana_ORG】で始まる関数定義までがオリジナルで、それ以降が飛鳥用に追加確保した関数に対する「実際の挙動の記述」となっています。


 それぞれの関数内容定義のうち、【#--------】で括ったところがメインアクションを記述するところで、その上は関数定義用の宣言です。
 また、【#--------】の下にある【ifsw CSW_COUNT】〜【endif】は「お得カウント」というoyayubiwm独自の機能のための記述となっています。記号類を打つ関数の場合は、間に挟む命令は【CALL _subCount1】にしておいてください*1


 こうやって挙動を記述したら、後はほかの文字と同じように呼んでやれば、そのとおりに動く……はずです。
 #最近いじっていないもので、どこか抜けているところがあるかもしれません^^;。

*1:カナを置いている関数の場合は、ローマ字で1打になる「あいうえおゃゅょん」については【CALL _subCount1】として、ローマ字で2打になる文字は【CALL _subCount2】にする……と、そういうことをするためにあります。