カテゴリ「その他」の記事 (4)

そもそも何故?

 まず、何故こんな手の込んだことをやるのかについて、ざっと説明します。

 15年ほど前から、私はDvorak配列を使っています。それ以前から、日本語の入力には漢直を使っていたので、Qwerty配列からDvorak配列への乗り換えは簡単でした。漢直の設定をIMEのローマ字テーブルに入れる(*1)という方法なので、その漢直用のテーブルのローマ字部分をQwertyからDvorakに置換するだけで済みました。つまり、英字配列を変えても日本語の入力方法に影響しなかったわけです。

「JIS仮名+漢直」と「親指シフト+漢直」の違い

 今年の夏、急に、仮名入力に漢直を混ぜる方法を思いついてしまいました。漢直のストロークをローマ字入力モードで渡すのではなく、仮名入力モードで(仮名文字列として)渡してしまおうというわけです。

 実際にやってみると、JIS仮名配列ではうまくいきましたが、親指シフトの場合は「。」と「.」が区別できずに(*2)行き詰まりました。

 しかし、漢直のストロークとして扱うためには、どうしても「。」と「.」は区別できなくてはなりません。現に、これまでずっと、ローマ字入力モードの漢直では何の問題もなく「。」と「.」を区別できていたので、このやり方ならうまくいくはずです。

親指シフトをローマ字テーブルで入力する

 そこで、「。」や「.」のキーを(アルファベットとして)ローマ字入力モードのIMEに渡して、ローマ字テーブルで「。」や「.」に変換するようにしました。部分的にローマ字入力モードにはできないので、当然、他の仮名や記号等も全部ローマ字テーブルで設定することになります。ローマ字テーブルで漢直のストロークを設定するのと同じように、仮名の“よみ”とは無関係に、キーの位置とシフト状態を示す中間コードとして扱うことにするわけです。

 以下は、そのために作ったDvorakJ用の設定内容(*)です。

同時に打鍵する配列

/*
 *  encode-oyayubi-qwerty-mu-hen-sp-kana.txt
 *
 *  ・左右の親指で同時打鍵シフト入力するためのDvorakJの設定ファイルです
 *      いわゆる“親指シフト方式”に限らず、親指でシフトする方式に使用できます
 *      実際に入力する文字(列)ではなく、中間コードを出力します
 *      IMEのローマ字入力モードで目的の文字(列)に変換することを想定しています
 *
 *  ・中間コードには、通常のQwerty配列の文字を使用し、以下の記号を前置します
 *      'ô':バックスラッシュの打鍵('\'と区別するため)
 *      'ŝ':通常のシフト打鍵
 *      'ò':左親指との同時打鍵 {無変換}
 *      'ó':右親指との同時打鍵 {変換}
 *      'ō':両親指との同時打鍵 {無変換}+{変換}    (※)オプション
 *      'ė':拡張1との同時打鍵 {空白}              (※)オプション
 *      'ë':拡張2との同時打鍵 {ひらがな}          (※)オプション
 *
 *      (※)コメントで無効にしてあります(必要に応じてコメントを外してください)
 *
 *  ・これは、日本語入力用の設定ファイルです
 *      必ず「日本語入力用配列を日本語入力時にのみ使用する」を選択してください
 *
 */


/* 文字(単独打鍵) */
[
1|2|3|4|5|6|7|8|9|0|{-}|{^}|{\}|
q|w|e|r|t|y|u|i|o|p|{@}|{[}|
a|s|d|f|g|h|j|k|l|;|{:}|{]}|
z|x|c|v|b|n|m|,|.|/|ô{\}|
]


/* シフト(ŝ) + 文字 */
-shift[
ŝ1|ŝ2|ŝ3|ŝ4|ŝ5|ŝ6|ŝ7|ŝ8|ŝ9|ŝ0|ŝ{-}|ŝ{^}|ŝ{\}|
ŝq|ŝw|ŝe|ŝr|ŝt|ŝy|ŝu|ŝi|ŝo|ŝp|ŝ{@}|ŝ{[}|
ŝa|ŝs|ŝd|ŝf|ŝg|ŝh|ŝj|ŝk|ŝl|ŝ;|ŝ{:}|ŝ{]}|
ŝz|ŝx|ŝc|ŝv|ŝb|ŝn|ŝm|ŝ,|ŝ.|ŝ/|ŝô{\}|
]


/* 左親指(ò) + 文字 */
-muhenkan[
ò1|ò2|ò3|ò4|ò5|ò6|ò7|ò8|ò9|ò0|ò{-}|ò{^}|ò{\}|
òq|òw|òe|òr|òt|òy|òu|òi|òo|òp|ò{@}|ò{[}|
òa|òs|òd|òf|òg|òh|òj|òk|òl|ò;|ò{:}|ò{]}|
òz|òx|òc|òv|òb|òn|òm|ò,|ò.|ò/|òô{\}|
{無変換}|
]


/* 右親指(ó) + 文字 */
-henkan[
ó1|ó2|ó3|ó4|ó5|ó6|ó7|ó8|ó9|ó0|ó{-}|ó{^}|ó{\}|
óq|ów|óe|ór|ót|óy|óu|ói|óo|óp|ó{@}|ó{[}|
óa|ós|ód|óf|óg|óh|ój|ók|ól|ó;|ó{:}|ó{]}|
óz|óx|óc|óv|ób|ón|óm|ó,|ó.|ó/|óô{\}|
{変換}|
]

〔オプションの部分は省略します〕

 このように、敢えてDvorakJでは実際に入力する文字を指定してません。その代わりに、論理的な打鍵情報を中間コード化することに徹しています。

 文字キーの中間コードに関しては(独自の符号を用いると煩雑になるので)Qwerty配列の文字をそのまま使っています。もちろんDvorak配列バージョンを作っても構いません。

 以下のように、Google日本語入力のローマ字テーブルの「入力」欄に中間コードを入れ、「出力」欄には目的の文字を入れます。

(表1) ローマ字テーブルの設定例:親指シフト(NICOLA-J)(*4)

最上段 上段
単独左親指右親指SHIFT 単独左親指右親指SHIFT
入力出力入力出力入力出力入力出力 入力出力入力出力入力出力入力出力
1 ò1 ó1 ŝ1 q òq óq ŝq
2 ò2 ó2 ŝ2 w òw ów ŝw
3 ò3 ó3 ŝ3 e òe óe ŝe
4 ò4 ó4 ŝ4 r òr ór ŝr
5 ò5 ó5 ŝ5 t òt ót ŝt
6 ò6 ó6 ŝ6 y òy óy ŝy
7 ò7 ó7 ŝ7 u òu óu ŝu
8 ò8 ó8 ŝ8 i òi ói ŝi
9 ò9 ó9 ŝ9 o òo óo ŝo
0 ò0 ó0 ŝ0 p òp óp ŝp
- ò- ó- ŝ- @ ò@ ó@ ŝ@
^ ò^ ó^ ŝ^ [ ò[ ó[ ŝ[
\ ò\ ó\ ŝ\
中段 下段
単独左親指右親指SHIFT 単独左親指右親指SHIFT
入力出力入力出力入力出力入力出力 入力出力入力出力入力出力入力出力
a òa óa ŝa z òz óz ŝz
s òs ós ŝs x òx óx ŝx
d òd ód ŝd c òc óc ŝc
f òf óf ŝf v òv óv ŝv
g òg óg ŝg b òb ób ŝb
h òh óh ŝh n òn ón ŝn
j òj ój ŝj m òm óm ŝm
k òk ók ŝk , ò, ó, ŝ,
l òl ól ŝl . ò. ó. ŝ.
; ò; ó; ŝ; / ò/ ó/ ŝ/
: ò: ó: ŝ: ô\ òô\_ óô\ ŝô\_
] ò] ó] ŝ]

 どの打鍵でも、通常のローマ字入力の「あ」「い」「う」「え」「お」と同じように即座に仮名が入力されるので、ローマ字入力を使っている感じはしないと思います。(目を凝らしてよく見れば、何かが一瞬表示されていることは分かりますが、入力の邪魔になるほどではありません)

各種キー配列への対応

 ここまでは親指シフト(NICOLA-J)を例にして説明しましたが、各種配列用の入力ローマ字テーブルを作ることによって、TRONなどの1打鍵系の仮名配列(*5)に対応できます。また、JISや新JISを親指でシフトできるようにするなどの応用も可能です。

この続きは?

 16日の「親指シフトに漢直をじわじわ混ぜていく方法」に詳しく書く予定です。


 この記事はDvorak Advent Calendar 2015漢直 Advent Calendar 2015のために書いたものです。

(*1) 漢直の設定をIMEのローマ字テーブルに入れる 詳しくは、先日の「仮名漢|漢直」問題を御覧ください。

(*2) 親指シフトの場合は「。」と「.」が区別できずに 日本語の文章を入力する場合は「。」か「.」のどちらか片方を使うのが普通なので、IMEの方でどちらにするかを選べるようになっています。たぶん、その処理のせいで片方しか入力できないのだろうと思われます。JIS仮名配列の場合は、漢直のストロークに句読点などの記号が入らないため、このような問題が生じなかったのです。

(*3) DvorakJ用の設定内容 親指キーの組み合わせは、{無変換}と{変換}のほかに、{無変換}と{空白}、{空白}と{変換}の2種類があります。どの組み合わせでも、IMEは同じ中間コードを受け取るようになっています。

(*4) 親指シフト(NICOLA-J) NICOLA規格 | NICOLA 日本語入力コンソーシアムを参考にして、文字キーを[BS]に用いない「NICOLA-J型」を選びました。また、ここからリンクされているQ's Nicolatter 8 の配列図にならって、未定義の部分を「●」としています。

(*5) TRONなどの1打鍵系の仮名配列 漢字のストロークを単独打鍵の文字の組み合わせで確実に判定できるものであれば、どのような配列でも問題ありません。なお、TRONキーボードには左右の親指を同時に押した状態で入力する文字があるので、「両親指との同時打鍵」をオプションとして追加できるようにしました。

q2d.pl

 漢直用のローマ字テーブルをQwerty配列からDvorak配列に変換するperlスクリプトです。

#
# q2d.pl - Qwerty配列用のローマ字テーブルをDvorak配列用に変換する
#
# 使い方: perl q2d.pl < qwerty-table > dvorak-table
#
%q2d = (
	'1', '1',	'2', '2',	'3', '3',	'4', '4',	'5', '5',
	'6', '6',	'7', '7',	'8', '8',	'9', '9',	'0', '0',
	'q','\'',	'w', ',',	'e', '.',	'r', 'p',	't', 'y',
	'y', 'f',	'u', 'g',	'i', 'c',	'o', 'r',	'p', 'l',
	'a', 'a',	's', 'o',	'd', 'e',	'f', 'u',	'g', 'i',
	'h', 'd',	'j', 'h',	'k', 't',	'l', 'n',	';', 's',
	'z', ';',	'x', 'q',	'c', 'j',	'v', 'k',	'b', 'x',
	'n', 'b',	'm', 'm',	',', 'w',	'.', 'v',	'/', 'z',
#
#	'google-ime_tutc-kigo.utf'で、
#	ストローク内の【 】を【'】で代用している箇所を【-】に置換する
#
	'\'', '-',
);

while (<>) {
	chop;
	if (/^([\x20-\x7e]+)\t(.+)$/) {
		($stroke, $kanji) = ($1, $2);
		@a = split(//, $stroke);
		$stroke = "";
		for $x (@a) {
			if (defined($q2d{$x})) {
				$stroke .= $q2d{$x};
			} else {
				$stroke .= $x;
			}
		}
		printf("%s\t%s\n", $stroke, $kanji);
	} else {
		printf("%s\n", $_);
	}
}

(※) Google日本語入力のローマ字テーブルの書式に合わせています。他の書式の場合は適当に変更してお使いください。


 この記事は漢直 Advent Calendar 2015のために書いたものです。

SendKansaku.mac

 これは、私が日頃使っている秀丸エディタ用のマクロです。4年ほど前から、Windows XP, Windows Vista, Windows 7 上で使ってきましたが、安定して動作しています。

 他のテキストエディタのマクロ等でも同じことができると思います。WindowsのAPIを使っていますが、初歩的なことしかやっていないので、何をやっているのかが分かる方は、どしどし移植してみてください。

//
//      SendKansaku - 選択文字列を「漢索窓」に送る
//
Main:
    if (selecting) {
        copy2;
        call SendKansaku;
    }
    endmacro;

SendKansaku:
    ##WM_LBUTTONDBLCRICK = 0x203;
    ##WM_RBUTTONDOWN = 0x204;
    ##WM_RBUTTONUP = 0x205;
    beginclipboardread;
    $$str = getclipboard;
    if ($$str != "") {
        ##wnd = findwindowclass("kansaku");
        if (0 < ##wnd) {
            if (iskeydown(0x10) == 1) {
                ##res = sendmessage(##wnd, ##WM_RBUTTONDOWN, 0, 0);
                ##res = sendmessage(##wnd, ##WM_RBUTTONUP, 0, 0);
            } else {
                ##res = sendmessage(##wnd, ##WM_LBUTTONDBLCRICK, 0, 0);
            }
        }
    }
    return;

設定方法

  1. ファイルを新規作成して、上記の内容をコピー&ペーストする
  2. “SendKansaku.mac”という名前でマクロ用ディレクトリに保存する
  3. メニューバー→「マクロ(M)」→「マクロ登録(E...)」で“SendKansaku.mac”を適当な名前で登録する
    (以下は“SendKansaku”で登録したものとする)
  4. メニューバー→「その他(O)」→「キー割り当て(K)...」で、適当なキー(キーの名前を◎とする)に以下の要領で割り当てる
    • Ctrl+◎にマクロ“SendKansaku”を割り当てる
    • Shift+Ctrl+◎にマクロ“SendKansaku”を割り当てる

使い方

  •  漢索窓と秀丸エディタを起動して、秀丸エディタのウインドウに隠されない位置に漢索窓を移動しておく
    1. 調べたい漢字(列)を選択状態にする
    2. “SendKansaku”用のホットキー(Ctrl+◎またはShift+Ctrl+◎)を打つ
      (Ctrl+◎は漢索窓をダブルクリックするのと同じ、Shift+Ctrl+◎は漢索窓を右クリックするのと同じ動作になる)
  •  漢索窓の表示をクリアしたい場合は、空白文字を選択してCtrl+◎を打つ

 この記事は漢直 Advent Calendar 2015のために書いたものです。

 最近、XOOPS Cubeというソフトをインストールしました。各種のモジュール(ユーザーの方々が、ブログ/Wiki/フォーラム/チャット/SNSなどを開発して公開しています)を追加すれば、いろんなモノに化けるという面白いシステムです。

 さっそく「第二実験室」という名前を付けて、あれこれ実験しています(2009年12月末公開を目指して、現在鋭意準備中です)。


[ 錬金術師の実験室 | m(as)m's home position ]

カレンダー

<   2016年12月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

最近のツイート

最近のコメント

このページについて

このページには、過去に書かれたブログ記事のうち、カテゴリ「その他」に属しているものが含まれています。

次のカテゴリはキーボードです。

最近の記事はメインページで、過去の記事はアーカイブで閲覧できます。

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 4.261