スポンサーリンク
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日)
どうも発動してくれない場合があります。一度発動してくれなくなると、ずっと発動してくれなかったり。
よく分からないのですが、一度スペースキーを押すと、また発動してくれるようになります。うーん謎です。
スポンサーリンク
スポンサーリンク