Ctrlswapmini用の「濁点分離かな配列」……8面キーマップすべてを贅沢に使用。

(未来:「かえで携帯配列(仮)」と「濁点分離かな配列」の動作チェックを完了。)
(未来:Ctrlswapmini用の「濁点分離かな配列」Part2……8面キーマップすべてを贅沢に使用。)
 Ctrlswapminiでは、(かなめくり・英字めくり・ベル打ち大文字・ベル打ち小文字・ニコタッチ大文字・ニコタッチ小文字・制御・数字直接入力……の都合8モードを実現するために)内部的に8面のキーマップを切り替えて使うことが出来ます
 切り替え方法は常に手動であり、「文字送出と同時に特定のキーマップヘ移行」というような組み合わせ定義が出来ないので、純粋ローマ字入力&携帯ローマ字入力の再現は無理です。
 一方で、これらのキーマップはキー入力で直接切り替えることが出来ます。


 ……これを利用すると、「中指連続プレフィックスシフト」的なシフト方法による入力法が使える、ということになります。
 また、文字めくりモードで「文字をめくれないように1文字のみキーに定義する」と、単打鍵でその文字が確定します。
 ……ということは、シフト用に2〜3キーを確保して、残りのキーを「単独打鍵でかな文字を出力」と定義していけば、「1打鍵系かな入力・連続シフト版」が設定可能だということになります。
 キー数が12個しかなく、かつキーマップが8面しかないので、いわゆる「清濁混合配列(約90文字)」を連続シフト化するためのスペースはありません。
 ところが、「清濁分離配列(63文字)」は、【9キー×7シフト】にちょうど収まってしまうんですよね……というわけで、無理やり配列を作成してみました。


 Ct面(センターシフト面)は、「0」キーを押すことで選択されます。
 どの面で「0」キーを押しても、かならずCt面へ移行します。
 今どのシフトモードにあるのかがわからなくなってしまったときには、「0」を一回押してCt面に移動するのが一番確実です。
 (あるいは後述する理由により、英字めくり面に入っていない状態であれば「*#」と押せばR1面へ、また「#*」と押せばL1面へと必ず移行します)


 L1〜L3面は、「*」キーを押すことにより順次選択されます。
 L1面で「*」キーを押すと、L2面へ移行します。
 L2面で「*」キーを押すと、L3面へ移行します。
 そのほかの面で「*」キーを押すと、かならずL1面へ移行します(英字めくり面を除く)。


 R1〜R3面は、「#」キーを押すことにより順次選択されます。
 R1面で「#」キーを押すと、R2面へ移行します。
 R2面で「#」キーを押すと、R3面へ移行します。
 R3面で「#」キーを押すと、R4面へ移行します。
 そのほかの面で「#」キーを押すと、かならずR1面へ移行します(英字めくり面を除く)。


 文字の順序については、新JISかな資料における頻度順をほぼそのまま採用しました。
 ただし、「た←→の」入れ替えをすることにより、高頻度濁音の「がじだで」4文字をシフト換えなしに打てるようにしています。
 また、濁点は「5」キーへと配置していますので、その関係でCt面の前半が1文字ずつずれています。
 シフトモードの変移確率は「Ct+L1+R1」の1打鍵範囲内のみで十分に高くなっているため、この方法論を用いてうまく配列を設計すれば、2.0打鍵方式を超える文字入力効率を確保できる……かもしれません。


 なお、今回は場当たり的にR4面(キーマップ7)へと「英字めくり」面を設けました。この面については英字めくりの最下段を若干いじるのみとなるので、今回は手抜き記述しています。

Ct面(キーマップ0)、初期状態

0:Ct 列1 列2 列3
D段
C段
B段
A段 Go L1 Go Ct Go R1

L1面(キーマップ1)

1:L1 列1 列2 列3
D段
C段
B段
A段 Go L2 Go Ct Go R1

R1面(キーマップ2)

2:R1 列1 列2 列3
D段
C段
B段
A段 Go L1 Go Ct Go R2

L2面(キーマップ3)

3:L2 列1 列2 列3
D段
C段
B段
A段 Go L3 Go Ct Go R1

R2面(キーマップ4)

4:R2 列1 列2 列3
D段
C段
B段
A段 Go L1 Go Ct Go R3

L3面(キーマップ5)

5:L3 列1 列2 列3
D段
C段
B段
A段 Go L1 Go Ct Go R1

R3面(キーマップ6)

6:R3 列1 列2 列3
D段
C段
B段
A段 Go L1 Go Ct Go R4

R4面(キーマップ7)

7:R4 列1 列2 列3
D段 英字めくり用 英字めくり用 英字めくり用
C段 英字めくり用 英字めくり用 英字めくり用
B段 英字めくり用 英字めくり用 英字めくり用
A段 英字めくり用 Go Ct 英字めくり用


 ……まじめに連接を考慮して配列設計するとなると、結構大変かもしれないですね……うーん。

で、とりあえず定義を書いてみた。

 Ctrlswapminiを触ったことがある方ならば、上記のような説明を読むよりも定義を見るほうが解りやすいですよね……ということで、早速定義を書いてみました。
 ただし、私はまだW-ZERO3[es]を持っていませんので、Ctrlswapminiにこの定義を読ませたとして「本当に動くかどうか」は解りません。参考定義としてお読みいただく程度にとどめていただければ幸いです。
 なお、この定義はCtrlswapmini作者様の標準定義を弄る形で作成させていただきました。

# 2006 Hiroyuki Ogasawara
# http://hp.vector.co.jp/authors/VA004474/wince/wince.html

# キーマップ制作:相沢かえで
# http://d.hatena.ne.jp/maple_magician/
#
# ctrlswapmini MultiShiftKanaTable.txt
# 

## 
## 以下の配列案(暫定仕様)をctrlswapmini用に定義してみました。
## http://d.hatena.ne.jp/maple_magician/20061013/1160666052
##

## 
## 英字入力については、標準的な「英字めくり入力」を使います。
## かな入力については、「多面連続シフトかな配列」を使います。
## 
## この配列は、Ctrlswapminiが持つ仕掛けを素直に用いつつ、
## 考え方・見方を変えるだけで風変わりな入力方法を実装できる
## ことを示すためのサンプルに過ぎません。
## 
## 覚えやすさ・打ちやすさについては一切考慮していませんし、
## 文字の並べ替えを行う最適化計算をすれば確実に良くなる余地がある
## という状態ですので、実用配列として使うにはお勧めしません。
## 


#------------------------------------------------------------------------------
# symbol	→標準定義のまま。
#------------------------------------------------------------------------------

## ここではわかりやすいように数値に名前を定義しています

# key
defcode	SPACE	'\x20'
defcode	RETURN	'\x0d'
defcode	;	'\xba'	# VK_SEMICOLON		[;:]	= [;+れ]
defcode	^	'\xbb'	# VK_EQUAL		[=+]	= [^~へ]
defcode	,	'\xbc'	# VK_COMMA		[,<]	= [,<ね]
defcode	-	'\xbd'	# VK_HYPHEN		[- ]	= [-=ほ]
defcode	.	'\xbe'	# VK_PERIOD		[.>]	= [.>る]
defcode	/	'\xbf'	# VK_SLASH		[/?]	= [/?め]
defcode	@	'\xc0'	# VK_BACKQUOTE		[`~]	= [@`゛]	濁点
defcode	[	'\xdb'	# VK_LBRACKET		[[{]	= [[{゜]	半濁点
defcode	\	'\xdc'	# VK_BACKSLASH		[\|]	= [\|ー]
defcode	]	'\xdd'	# VK_RBRACKET		}]	= }む]
defcode	:	'\xde'	# VK_APOSTROPHE		['"]	= [:*け]
defcode	_	'\xe2'	# VK_OEM_102		[<>]	= [ _ろ]
defcode	KANJI	'\x19'
defcode	ZSPACE	'\xe5'	# VK_PROCESSKEY

# VK
defcode	VK_TAB		'\x09'
defcode	VK_RETURN	'\x0d'
defcode	VK_SHIFT	'\x10'
defcode	VK_CONTROL	'\x11'
defcode	VK_KANA		'\x15'
defcode	VK_KANJI	'\x19'
defcode	VK_PRIOR	'\x21'
defcode	VK_NEXT		'\x22'
defcode	VK_END		'\x23'
defcode	VK_HOME		'\x24'
defcode	VK_LEFT		'\x25'
defcode	VK_UP		'\x26'
defcode	VK_RIGHT	'\x27'
defcode	VK_DOWN		'\x28'
defcode	VK_LWIN		'\x5b'
defcode	VK_RWIN		'\x5c'
defcode	VK_APPS		'\x5d'
defcode	VK_F1		'\x70'	# SoftKey1
defcode	VK_F2		'\x71'	# SoftKey2
defcode	VK_F3		'\x72'
defcode	VK_F4		'\x73'
defcode	VK_F5		'\x74'
defcode	VK_F6		'\x75'
defcode	VK_F7		'\x76'
defcode	VK_F8		'\x77'
defcode	VK_F9		'\x78'
defcode	VK_F10		'\x79'
defcode	VK_F11		'\x7a'
defcode	VK_F12		'\x7b'
defcode	VK_HANZEN	'\xf3'


# char attribute
defcode	ASCII		'\x08'
defcode	KANA		'\x01'
defcode	SHIFT		'\x02'
defcode	DAKUTEN		'\x10'
defcode	HANDAKUTEN	'\x20'


# command
defcode	MODECHANGE	'\x1'
defcode	IME		'\x2'
defcode	STATECLEAR	'\x3'
defcode	KEYMAP		'\x4'
defcode	CMD_CONVERT	'\x5'
defcode	CMD_RCONVERT	'\x6'


# raw
defcode	DOWN		'\x1'
defcode	UP		'\x2'


# key function
defcode	nop		'\x0'
defcode	bell		'\x1'
defcode	toggle		'\x2'
defcode	reverse		'\x3'
defcode	convert		'\x4'
defcode	rconvert	'\x5'


# keymap
#defcode	bell_normal	'\x0'
#defcode	bell_small	'\x1'
#defcode	niko_normal	'\x2'
#defcode	niko_small	'\x3'
#defcode	ext_kana	'\x4'
#defcode	ext_alphabet	'\x5'
#defcode	rotate_cur	'\x6'
#defcode	rotate_num	'\x7'
defcode	Ct	'\x0'
defcode	L1	'\x1'
defcode	R1	'\x2'
defcode	L2	'\x3'
defcode	R2	'\x4'
defcode	L3	'\x5'
defcode	R3	'\x6'
defcode	R4	'\x7'
# (2006年10月15日2:49:40、上記#keymapを8行コメントアウトし書き換え)


#------------------------------------------------------------------------------
# ex toggle  kana	→新JISかな頻度順の多面連続シフトかな配列化。
#------------------------------------------------------------------------------

## ここからが拡張かな入力用の定義になります。
## 各キー毎にトグル入力される文字を記述します。
## attach は[*]で変換される文字を表します。

Keymap	Ct
Key	toggle	# [1]
char	KANA		E		# い
Key	toggle	# [2]
char	KANA		4 		# う
Key	toggle	# [3]
char	KANA		Y	 	# ん
Key	toggle	# [4]
char	KANA		D	 	# し
Key	toggle	# [5]
attach	KANA		@		# 濁点
Key	toggle	# [6]
char	KANA		T	 	# か
Key	toggle	# [7]
char	KANA		Q	 	# た
Key	toggle	# [8]
char	KANA		S	 	# と
Key	toggle	# [9]
char	KANA		W	 	# て
Key	toggle	# [*]
command	KEYMAP	L1	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R1	# 切り替え

Keymap	L1
Key	toggle	# [1]
char	KANA		K	 	# の
Key	toggle	# [2]
char	KANA		G	 	# き
Key	toggle	# [3]
char	KANA SHIFT	,		# 、
Key	toggle	# [4]
char	KANA		H	 	# く
Key	toggle	# [5]
char	KANA		F	 	# は
Key	toggle	# [6]
char	KANA		I	 	# に
Key	toggle	# [7]
char	KANA		B	 	# こ
Key	toggle	# [8]
char	KANA		.		# る
Key	toggle	# [9]
char	KANA SHIFT	9	 	# ょ
Key	toggle	# [*]
command	KEYMAP	L2	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R1	# 切り替え

Keymap	R1
Key	toggle	# [1]
char	KANA		Z	 	# つ
Key	toggle	# [2]
char	KANA		P	 	# せ
Key	toggle	# [3]
char	KANA		U	 	# な
Key	toggle	# [4]
char	KANA SHIFT	Z	 	# っ
Key	toggle	# [5]
char	KANA SHIFT	0	 	# を
Key	toggle	# [6]
char	KANA		L	 	# り
Key	toggle	# [7]
char	KANA		R	 	# す
Key	toggle	# [8]
char	KANA		:	 	# け
Key	toggle	# [9]
char	KANA SHIFT	.		# 。
Key	toggle	# [*]
command	KEYMAP	L1	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R2	# 切り替え

Keymap	L2
Key	toggle	# [1]
char	KANA		X	 	# さ
Key	toggle	# [2]
char	KANA		3		# あ
Key	toggle	# [3]
char	KANA		A	 	# ち
Key	toggle	# [4]
char	KANA		C	 	# そ
Key	toggle	# [5]
char	KANA		;		# れ
Key	toggle	# [6]
char	KANA SHIFT	8		# ゅ
Key	toggle	# [7]
char	KANA		O	 	# ら
Key	toggle	# [8]
char	KANA		2	 	# ふ
Key	toggle	# [9]
char	KANA		9	 	# よ
Key	toggle	# [*]
command	KEYMAP	L3	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R1	# 切り替え

Keymap	R2
Key	toggle	# [1]
char	KANA		M	 	# も
Key	toggle	# [2]
char	KANA		6 		# お
Key	toggle	# [3]
char	KANA		-	 	# ほ
Key	toggle	# [4]
char	KANA		5 		# え
Key	toggle	# [5]
char	KANA		J	 	# ま
Key	toggle	# [6]
char	KANA		/	 	# め
Key	toggle	# [7]
char	KANA		V	 	# ひ
Key	toggle	# [8]
char	KANA		N	 	# み
Key	toggle	# [9]
char	KANA		0	 	# わ
Key	toggle	# [*]
command	KEYMAP	L1	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R3	# 切り替え

Keymap	L3
Key	toggle	# [1]
char	KANA		7	 	# や
Key	toggle	# [2]
char	KANA SHIFT	/		# ・ 中点
Key	toggle	# [3]
char	KANA		^	 	# へ
Key	toggle	# [4]
attach	KANA		[		# 半濁点
Key	toggle	# [5]
char	KANA		_		# ろ
Key	toggle	# [6]
char	KANA		,	 	# ね
Key	toggle	# [7]
char	KANA		\		# ー 伸ばし棒
Key	toggle	# [8]
char	KANA SHIFT	7	 	# ゃ
Key	toggle	# [9]
char	KANA		]	 	# む
Key	toggle	# [*]
command	KEYMAP	L1	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R1	# 切り替え

Keymap	R3
Key	toggle	# [1]
char	KANA		8		# ゆ
Key	toggle	# [2]
char	KANA SHIFT	]		# [79] 」
Key	toggle	# [3]
char	KANA SHIFT	[		# [76] 「
Key	toggle	# [4]
char	KANA SHIFT	E		# ぃ
Key	toggle	# [5]
char	KANA		1	 	# ぬ
Key	toggle	# [6]
char	KANA SHIFT	5 		# ぇ
Key	toggle	# [7]
char	KANA SHIFT	3		# ぁ
Key	toggle	# [8]
char	KANA SHIFT	6 		# ぉ
Key	toggle	# [9]
char	KANA SHIFT	4 		# ぅ
Key	toggle	# [*]
command	KEYMAP	L1	# 切り替え
Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え
Key	toggle	# [#]
command	KEYMAP	R4	# 切り替え



#------------------------------------------------------------------------------
# ex toggle  alphabet	→「0」の内容を「*」に移動、「0」はCtへのジャンプ。
#------------------------------------------------------------------------------
Keymap	R4

Key	toggle	# [1]
char	ASCII		.		# .
char	ASCII		/		# /
char	ASCII SHIFT	_		# _
char	ASCII		@		# @
char	ASCII		1		# 1



Key	toggle	# [2]
char	ASCII SHIFT	A		# A
attach	ASCII		A		# a
char	ASCII SHIFT	B		# B
attach	ASCII		B		# b
char	ASCII SHIFT	C		# C
attach	ASCII		C		# c
char	ASCII		A		# a
attach	ASCII SHIFT	A		# A
char	ASCII		B		# b
attach	ASCII SHIFT	B		# B
char	ASCII		C		# c
attach	ASCII SHIFT	C		# C
char	ASCII		2		# 2



Key	toggle	# [3]
char	ASCII SHIFT	D		# D
attach	ASCII		D		# d
char	ASCII SHIFT	E		# E
attach	ASCII		E		# e
char	ASCII SHIFT	F		# F
attach	ASCII		F		# f
char	ASCII		D		# d
attach	ASCII SHIFT	D		# D
char	ASCII		E		# e
attach	ASCII SHIFT	E		# E
char	ASCII		F		# f
attach	ASCII SHIFT	F		# F
char	ASCII		3		# 3




Key	toggle	# [4]
char	ASCII SHIFT	G		# G
attach	ASCII		G		# g
char	ASCII SHIFT	H		# H
attach	ASCII		H		# h
char	ASCII SHIFT	I		# I
attach	ASCII		I		# i
char	ASCII		G		# g
attach	ASCII SHIFT	G		# G
char	ASCII		H		# h
attach	ASCII SHIFT	H		# H
char	ASCII		I		# i
attach	ASCII SHIFT	I		# I
char	ASCII		4		# 4



Key	toggle	# [5]
char	ASCII SHIFT	J		# J
attach	ASCII		J		# j
char	ASCII SHIFT	K		# K
attach	ASCII		K		# k
char	ASCII SHIFT	L		# L
attach	ASCII		L		# l
char	ASCII		J		# j
attach	ASCII SHIFT	J		# J
char	ASCII		K		# k
attach	ASCII SHIFT	K		# K
char	ASCII		L		# l
attach	ASCII SHIFT	L		# L
char	ASCII		5		# 5



Key	toggle	# [6]
char	ASCII SHIFT	M		# M
attach	ASCII		M		# m
char	ASCII SHIFT	N		# N
attach	ASCII		N		# n
char	ASCII SHIFT	O		# O
attach	ASCII		O		# o
char	ASCII		M		# m
attach	ASCII SHIFT	M		# M
char	ASCII		N		# n
attach	ASCII SHIFT	N		# N
char	ASCII		O		# o
attach	ASCII SHIFT	O		# O
char	ASCII		6		# 6



Key	toggle	# [7]
char	ASCII SHIFT	P		# P
attach	ASCII		P		# p
char	ASCII SHIFT	Q		# Q
attach	ASCII		Q		# q
char	ASCII SHIFT	R		# R
attach	ASCII		R		# r
char	ASCII SHIFT	S		# S
attach	ASCII		S		# s
char	ASCII		P		# p
attach	ASCII SHIFT	P		# P
char	ASCII		Q		# q
attach	ASCII SHIFT	Q		# Q
char	ASCII		R		# r
attach	ASCII SHIFT	R		# R
char	ASCII		S		# s
attach	ASCII SHIFT	S		# S
char	ASCII		7		# 7




Key	toggle	# [8]
char	ASCII SHIFT	T		# T
attach	ASCII		T		# t
char	ASCII SHIFT	U		# U
attach	ASCII		U		# u
char	ASCII SHIFT	V		# V
attach	ASCII		V		# v
char	ASCII		T		# t
attach	ASCII SHIFT	T		# T
char	ASCII		U		# u
attach	ASCII SHIFT	U		# U
char	ASCII		V		# v
attach	ASCII SHIFT	V		# V
char	ASCII		8		# 8



Key	toggle	# [9]
char	ASCII SHIFT	W		# W
attach	ASCII		W		# w
char	ASCII SHIFT	X		# X
attach	ASCII		X		# x
char	ASCII SHIFT	Y		# Y
attach	ASCII		Y		# y
char	ASCII SHIFT	Z		# Z
attach	ASCII		Z		# z
char	ASCII		W		# w
attach	ASCII SHIFT	W		# W
char	ASCII		X		# x
attach	ASCII SHIFT	X		# X
char	ASCII		Y		# y
attach	ASCII SHIFT	Y		# Y
char	ASCII		Z		# z
attach	ASCII SHIFT	Z		# Z
char	ASCII		9		# 9



Key	convert	# [*]
char	ASCII		SPACE 		# SPC
char	ASCII SHIFT	4 		# $
char	ASCII SHIFT	5 		# %
char	ASCII SHIFT	; 		# +
char	ASCII SHIFT	, 		# <
char	ASCII SHIFT	- 		# =
char	ASCII SHIFT	. 		# >
char	ASCII		[ 		# [
char	ASCII		] 		# ]
char	ASCII		^ 		# ^
char	ASCII SHIFT	7 		# '
char	ASCII SHIFT	[ 		# {
char	ASCII SHIFT	\ 		# |
char	ASCII SHIFT	] 		# }
char	ASCII		0 		# 0


Key	toggle	# [0]
command	KEYMAP	Ct	# 切り替え



Key	reverse	# [#]
char	ASCII		-		# -
char	ASCII SHIFT	6		# &
char	ASCII		\		# \
char	ASCII		;		# ;
char	ASCII		:		# :
char	ASCII SHIFT	2		# "
char	ASCII SHIFT	7		# '
char	ASCII SHIFT	9		# )
char	ASCII SHIFT	8		# (
char	ASCII SHIFT	^		# ~
char	ASCII SHIFT	/		# ?
char	ASCII SHIFT	1		# !
char	ASCII		.		# .
char	ASCII		,		# ,

## convert や reverse は、toggle と同じように記述することで
## 文字入力キーとして併用することができます。
## 変換文字がない場合に文字入力します。

## toggle で action が 1つしかない場合は、
## 1回押しただけで反応する直接入力キーとして機能します。