情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

ATOKで「zh zj zk zl」を矢印に割り当てたかったので実施した設定(AutoHotkey)

ATOK (12) ATOK 2017 (1) AutoHotkey (19) Windows (292) Windows 10 (82)

Google日本語入力とATOKの両方を利用していて、Google日本語入力で利用できる「zh zj zk zl」が矢印に置き換えられる設定をATOKでもやりたいなぁ、と思ったので、その設定をメモしておきます。AutoHotkeyのホットストリング機能でやってしまおうかと迷った結果、ATOKでやってみることにしました。

しかし、結局諦めてAutoHotkeyで設定してしまったので、AutoHotkeyユーザー向けです。

ATOK ローマ字カスタマイズ

ローマ字カスタマイズ機能とは、「cha」を「ちゃ」に変換する、といった、ローマ字入力の設定を行うための設定です。

ここで、「zh」を「←」のように割り当てれば良いのかと思ったのですが、これは「かな以外の文字が含まれています」エラーになってしまいました。

それはそうですよね、おそらくここで行われる置換は、日本語変換の前処理なので、結果がひらがなになっていないと、次の変換時に困ってしまいますもんね。

辞書に追加

続いて、辞書に追加してみることにしました。

試しに「zh」を「←」に変換するように辞書設定をして、「zhこれです」と入力して変換してみると、「←これです」となりました。

ただ、Google日本語入力のように「zh」と入力した瞬間に「←」になってくれないのと、続く日本語によっては「←あんがいいける」が入力途中「zはんがいいける」のように、矢印とつながってしまい、かなり指先が混乱します。

AutoHotkeyを使う

結局、AutoHotkeyのホットストリングで解決することにしました。

ホットストリング機能

AutoHotkeyには、設定ファイルに「::btw::by the way」と書くと、「btw」の後にスペースを押したとき「by the way」に自動展開される、ホットストリングと呼ばれる機能があります。

この機能を応用しますが、いくつかの問題が発生するので、一つずつ回避します。

次に何か入力しないと変換されない問題の対策

まず今の「btw」の変換の例で紹介したとおり、「スペース」など、別の特別なキーを次の文字として押すまで、置換は発動してくれません

これでは「zh(スペース)」のように入力する必要が発生します。

これをコンパクトに解決するには、「:*:btw::by the way」と、「::」を「:*:」とします。

こうすることで、ホットストリングの置換機能が、パターンの検出直後、即時実行されます。

2バイト文字を変換先に指定できない問題の対策

今回の目的の場合、「:*:zh::←」のように設定したいのですが、置換先の文字に2バイト文字を指定することはできないようでした

置換後のテキストに2バイト文字を使うことはできないので、スクリプト実行型でクリップボードを経由して貼り付けるなどの方法を取る必要がある。 引用元

なので、クリップボードを経由して2バイト文字を挿入する、次の関数を用意しました(普段から使っている自前の関数):

InsertText(Content) {
	cb_bk = %ClipboardAll%
	Clipboard = %Content%
	Send, ^v
	Sleep, 200
	Clipboard = %cb_bk%
}

この関数を使って、「2バイト文字をホットストリング機能で扱えない問題」を、クリップボードを保護しつつ、回避します。

関数が実行されず関数名自体が入力されてしまう問題の対策

この関数を使うと、「:*:zh::InsertText("←")」と設定すれば良いはずです。

しかしこれを設定したところ、「zh」と入力すると、「InsertText("←")」が入力されてしまいました。なので、ホットストリング機能が「置換先文字列」と認識されないように、

:*:zh::
	InsertText("←")
	Return
:*:zj::
	InsertText("↓")
	Return
:*:zk::
	InsertText("↑")
	Return
:*:zl::
	InsertText("→")
	Return

と、Returnを使い、実行部分を複数行にする書き方をする必要がありました。

実は日本語いけた

ただ、ここで「あれ?」って思ったかもしれません。

「:*:zh::InsertText("←")」と設定したら、「zh」が「「InsertText("←")」」に展開されてしまったのですが、これはつまり、置換先に2バイト文字を含めることができています

AutoHotkey最終結果

というわけで、この結果、設定はコンパクトな以下の通りとなりました。

:*:zh::←
:*:zj::↓
:*:zk::↑
:*:zl::→

ATOK有効状態でもうまくいった

ここで予想される問題は、ここまでのAutoHotkeyの設定は、日本語入力がONの状態でどういう挙動を見せるか、よくわからない、という点です。

ここまでの設定をして実際に試してみたところ、「zh」と入力した時点で、変換候補を選んでいる状態で現在「←」を選択しているような状態になりました。要するに、「←」を再変換している最中のような状況です。つまり、確定するには「Enter」を押す必要はあります。しかし、変換開始側の「スペース」キーを押す必要はありません。つまり、辞書登録するより1ストローク省略されました。

様子見中(4月30日)

まだ設定したばかりなので、ここからどんな不都合が出てくるか把握できていません(AutoHotkeyのに新しい設定を加えた直後は、だいたい微妙なことが発生しがち)。

ひとまず様子見します。

様子見後(5月31日)

どうも発動してくれない場合があります。一度発動してくれなくなると、ずっと発動してくれなかったり。

よく分からないのですが、一度スペースキーを押すと、また発動してくれるようになります。うーん謎です。

コメント(0)

新しいコメントを投稿