PhraseExpress と日本語入力の干渉を解決する
後で気付いたけどスーパー車輪の再発明でしたー→[PhraseExpress]英数字が全角未確定状態になる問題への対処方法 - 流れるような一日を(旧)
PhraseExpress とは
このように、MacでいうTextExpanderのような定型文入力支援アプリケーションであると、公式サイトのtitleで堂々と謳い上げています。しかし、これはかなり語弊のある表現で、どちらかといえば、汎アプリケーション的なマクロ実行プログラムであるとするのが正確でしょう。
というのは、PhraseExpressには以下のような特徴があるためです。
- キー操作、外部アプリケーション実行、スクリプトなどを登録できる。
- Phrase(定型文)ごとにショートカットキーを設定できる。
- Phraseごとにどのアプリケーションで実行するかを設定できる。
ここまで来ると、もはや文章入力支援という表現では足りず、あらゆるアプリケーションをコントロールできるマクロプログラムと考えるべきでしょう。どちらかと言えば、TextExpanderよりもAutoHotKeyに近いといえます。
日本語入力との干渉
当初はTextExpanderそのままの感じで使おうとしたのですが、PhraseExpressでは、Google日本語入力などが「IMEオン」の状態でPhraseを展開すると、「変換前のテキスト」として出力されます。つまり、エンターキーで確定する必要があります。
TextExpanderの場合、「TEIMPrefsetter」で日本語入力時にも実行されるよう設定すれば、確定済みのテキストが直接展開されます。辞書登録と比較した場合のTextExpanderの基本的な優位点は、「候補の中から選ぶ必要がない」ことと、「確定の手間が省ける」ことだといえますが、PhraseExpressではその半分が失われているわけです。
「IMEオフ」の状態で展開すれば当然問題ないわけですが、いちいち切り替えるのは業腹です。しかし、PhraseExpressでは、Phraseにキー操作を含むことができるので、IMEのオンオフ切り替えを自動的に実行すればよいのではないかと考えました。
Google日本語入力の場合の設定
Google日本語入力のキー設定
PhraseExpressで実行できるキー操作は、「Modifier」+「"Function key" or "Char"」+「Count」です。
- Modifier: Ctrl/Alt/Shift/Win の組み合わせ
- Function key: F1~16/Enter/Tab/Esc/Del/Backspase/矢印キーなど
- Char: A~Z、0~9のいずれか(必ずModifierと組み合わせる)
- Count: 回数を指定
ここで、「Function key」には、日本語JISキーボード特有の「半角/全角」などは含まれないため、それを考慮した上でGoogle日本語入力のキー設定を行う必要があります。
例えば、「プロパティ>一般>(キー設定)>キー設定の選択」で、以下のように設定します。
モード | 入力キー | コマンド |
---|---|---|
入力文字なし | Ctrl Shift F12 | IMEを無効化 |
直接入力 | Ctrl Shift F11 | IMEを有効化 |
PhraseExpressへのPhrase登録
以下のようなPhraseを登録します。
{#CTRL {#SHIFT {#F12}}}PhraseExpress{#CTRL {#SHIFT {#F11}}}
キー操作部分は、「Phrase content」フィールドで「右クリック>Macro>Simulate entering a special key>more…」などで入力できます。上記のソースをペーストしても大丈夫です。
IMEオンの状態で、上記のPhraseに対するAutotext(省略形)またはHotkeyを入力すると、
の順で実行され、結果として、確定済みのテキストが入力された状態でIMEがオンに戻ります。
補足
TextExpanderでも同様ですが、Autotextが例えば「pe」のようなローマ字変換される組み合わせの場合、文字数が減るため、Autotext以外の文字まで削除されてしまいます。IMEがオフになるのはAutotextが展開された後であるため、この現象は今回のテクニックで防ぐことができません。Autotextは基本的に子音+記号で構成すべきです。
また、テンプレートとなるPhraseを用意しておくと、Phraseの登録を省力化することができます。例えば、 {#CTRL {#SHIFT {#F12}}}{#CTRL {#SHIFT {#F11}}}
のようなPhraseを用意しておき、これにはAutotextもHotkeyも設定しないようにします。あとは、このPhraseをDuplicate(右クリックメニューから選択/Ctrl+D)して、複製されたPhraseを編集すると楽です。