blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

市式仮配列を実装してみよう 第五回

第五回の概要

前回までの設定を改良してから、「真に同時に打鍵する」動作を、市式仮配列に導入する。

前回までの設定の改良

前回までの設定を改良することから始めよう。まず、設定ファイルの冒頭に、市式仮配列の仕様のページの url を書いておく。これで、仕様を確認しやすくなるだろう。

/*
 * 市式仮配列
 * http://blog.livedoor.jp/ickw0911/archives/51402501.html
 */

つぎに進もう。前回までの -option-input の部分では、キーの位置情報を QWERTY 配列のキーの文字にひもづけていた。この設定に加えて、文字にとらわれずにキーの位置そのものと、市式仮配列上の文字にも、キーの位置情報を関連づけさせる。こうすることで、設定ファイル全体が見やすくなると思われる。これらをそのまま反映させると、つぎのように書き換えられる。なお、[r],[t]のように半角カンマを挟んだときには、[r] と [t] に共通の設定を適用する、ということを意味する。

-option-input[
    /* QWERTY */
        /* 上段 */
            [q] | -10
            [w] | -11
            [e] | -12
            [r] | -13
            [t] | -14

            [y] | -15
            [u] | -16
            [i] | -17
            [o] | -18
            [p] | -19
            [@] | -1A
            [[] | -1B

        /* 中段 */
            [a] | -1E
            [s] | -1F
            [d] | -20
            [f] | -21
            [g] | -22

            [h] | -23
            [j] | -24
            [k] | -25
            [l] | -26
            [;] | -27
            [:] | -28
            []] | -2B

        /* 下段 */
            [z] | -2C
            [x] | -2D
            [c] | -2E
            [v] | -2F
            [b] | -30

            [n] | -31
            [m] | -32
            [,] | -33
            [.] | -34
            [/] | -35
            [\] | -73

	/* 位置の指定 */
        /* 上段 */
            {上段左手小指}     | [q]
            {上段左手薬指}     | [w]
            {上段左手中指}     | [e]
            {上段左手人差し指} | [r], [t]

        /* 中段 */
            {中段左手小指}     | [a]
            {中段左手薬指}     | [s]
            {中段左手中指}     | [d]
            {中段左手人差し指} | [f], [g]

        /* 下段 */
            {下段左手小指}     | [z]
            {下段左手薬指}     | [x]
            {下段左手中指}     | [c]
            {下段左手人差し指} | [v]

    /* 市式仮配列上の設定 */
        /* 上段 */
            {p} | [q]
            {y} | [w]
            {r} | [e]
            {h} | [r]
            {b} | [t]

            {上段ち} | [y]
            {上段き} | [u]
            {イ行} | [i]
            {エ行} | [o]
            {上段つ} | [p]

        /* 中段 */
            {s} | [a]
            {t} | [s]
            {k} | [d]
            {n} | [f]
            {w} | [g]

            {中段つ} | [h]
            {ア行} | [j]
            {ウ行} | [k]
            {オ行} | [l]
            {★} | [;]
            {中段く} | [:]

        /* 下段 */
            {z} | [z]
            {d} | [x]
            {g} | [c]
            {m} | [v]
            {◇} | [b]

            {下段く} | [n]
            {◆} | [m]
            {下段ち} | [,]
            {下段き} | [.]
]

この膨大な設定のおかげで、それ以後の設定は簡単なものになる。前回までの設定を整理し改良すれば、つぎのようにまとめられる。整理する際は、表にできるだけ多くの文字を割り当てることと、表そのものをできるだけ減らすことの二点に気をつければよいだろう。

/* 基本の設定 */
[

p|y|r|h|b| | |i|e| |
s|t|k|n|w| |a|u|o| |
z|d|g|m| | | | | | |
]

/* 子音同士を打鍵 */
	/* 上段 */
		{上段左手小指}[

		  |you|yuu|  |  |
		  |   |   |  |  |
		  |   |   |  |  |
		]

		{上段左手薬指}[

		  |  |you|yuu|  |
		  |  |   |   |  |
		  |  |   |   |  |
		]

		{上段左手中指}[

		  |yuu|  |you|  |
		  |   |  |   |  |
		  |   |  |   |  |
		]

		{上段左手人差し指}[

		  |yuu|you|  |  |
		  |   |   |  |  |
		  |   |   |  |  |
		]

	/* 中段 */
		{中段左手小指}[

		  |   |   |  |  |
		  |you|yuu|  |  |
		  |   |   |  |  |
		]

		{中段左手薬指}[

		  |  |   |   |  |
		  |  |you|yuu|  |
		  |  |   |   |  |
		]

		{中段左手中指}[

		  |   |  |   |  |
		  |yuu|  |you|  |
		  |   |  |   |  |
		]

		{中段左手人差し指}[

		  |   |   |  |  |
		  |yuu|you|  |  |
		  |   |   |  |  |
		]

	/* 下段 */
		{下段左手小指}[

		  |   |   |  |  |
		  |   |   |  |  |
		  |you|yuu|  |  |
		]

		{下段左手薬指}[

		  |  |   |   |  |
		  |  |   |   |  |
		  |  |you|yuu|  |
		]

		{下段左手中指}[

		  |   |  |   |  |
		  |   |  |   |  |
		  |yuu|  |you|  |
		]

		{下段左手人差し指}[

		  |   |   |  |  |
		  |   |   |  |  |
		  |yuu|you|  |  |
		]


	/* 頻出単語 */
		{k}[

		  |  |ara|  |  |
		  |  |   |  |  |
		  |  |oto|  |  |
		]

		{t}[

		  |ta|  |  |  |
		  |  |  |  |  |
		  |te|  |  |  |
		]

/* 同時に打鍵 */
	({ア行}[

	pa|ya|ra|ha|ba|
	sa|ta|ka|na|wa|
	za|da|ga|ma|
	]

	({イ行}[

	pi|yi|ri|hi|bi|
	si|ti|ki|ni|wi|
	zi|di|gi|mi|
	]

	({ウ行}[

	pu|yu|ru|hu|bu|
	su|tu|ku|nu|wu|
	zu|du|gu|mu|
	]

	({エ行}[

	pe|ye|re|he|be|
	se|te|ke|ne|we|
	ze|de|ge|me|
	]

	({オ行}[

	po|yo|ro|ho|bo|
	so|to|ko|no|wo|
	zo|do|go|mo|
	]

これで、設定ファイルの内容が把握しやすくなったと思われる。

真に同時に打鍵する動作の実装

市式仮配列の説明で何度も出てくる、「押しながら」という動作を実現するには、 -1E のようなものを +1E と書き換えること。DvorakJ で「真に同時に打鍵する動作」と呼ぶ、キーを押し下げている間はそのキーを押し下げたものとして扱う挙動は、"-" を "+" に変更することで設定する*1。具体的には、-option-input 内の該当箇所を書き換える必要がある。それか、+1E のような表記を、各表のはじめにそのまま書く。例を出そう。以下のように書けば、スキャン・コードが 24 のキー、つまり QWERTY 配列でいう J、 市式仮配列では「ア行」のキーを、押し下げたものとして判定し続ける。

(+24[

pa|ya|ra|ha|ba|
sa|ta|ka|na|wa|
za|da|ga|ma|
]

もしも -option-input 内の -24 を +24 に書き換えたのならば、同時に打鍵する設定と同一の設定を記述すればよい。

({ア行}[

pa|ya|ra|ha|ba|
sa|ta|ka|na|wa|
za|da|ga|ma|
]

二重母音(連母音)拡張のような、複数のキーを押し下げる動作の実装

では、「ア行とイ行押しながら」のように、複数のキーを押し下げている状態で他のキーを打鍵するという動作は、どのように設定するのか。答えは簡単である。使用するキーを並べて記述するだけである。例を挙げるが、ただし、{ア行}と{イ行}に該当するキーの設定を "-" から "+" に書き換えていることを前提としている。

({ア行}{イ行}[

pai|yai|rai|hai|bai|
sai|tai|kai|nai|wai|
zai|dai|gai|mai|
]

「特殊拡張」以外の設定の実装……

今回も残りの設定の実装例を省略する。ただし、「特殊拡張」については説明すべきことがあるから、次回実装することにしよう。


次回で、市式仮配列の実装を終えよう。

*1:そうはいうものの、この説明についてはヘルプページで十分に説明していない。ヘルプページには、図を用いた説明を後日追加する予定である。