basyura's blog

あしたになったらほんきだす。

Visual Studio + ViEmu + AutoHotkey で insert モードを抜けるときに IME を OFF にする

ime.ahkの機能を強化した結果、タイトルどおりの機能を実装するに至った。以下のリンク先から改変後のime.ahkを入手できる。

使用しているIMEの情報を ime.ahk で表示できるようにした

ここにある IME.ahk をダンロードして修正。

IME_GetConverting(WinTitle="A",ConvCls="",CandCls="") {

    ;IME毎の 入力窓/候補窓Class一覧 ("|" 区切りで適当に足してけばOK)
    ConvCls .= (ConvCls ? "|" : "")                 ;--- 入力窓 ---
            .  "ATOK\d+CompStr"                     ; ATOK系
            .  "|imejpstcnv\d+"                     ; MS-IME系
            .  "|WXGIMEConv"                        ; WXG
            .  "|SKKIME\d+\.*\d+UCompStr"           ; SKKIME Unicode
            .  "|MSCTFIME Composition"              ; Google日本語入力

    CandCls .= (CandCls ? "|" : "")                 ;--- 候補窓 ---
            .  "ATOK\d+Cand"                        ; ATOK系
            .  "|imejpstCandList\d+|imejpstcand\d+" ; MS-IME 2002(8.1)XP付属
            .  "|mscandui\d+\.candidate"            ; MS Office IME-2007
            .  "|WXGIMECand"                        ; WXG
            .  "|SKKIME\d+\.*\d+UCand"              ; SKKIME Unicode
-  CandGCls := "GoogleJapaneseInputCandidateWindow" ;Google日本語入力
+  CandGCls := "GoogleJapaneseInputCompositionWindow" ;Google日本語入力

自分の .ahk に設定を追加。僕の場合、 を Esc にしているので、その判定を追加。

#Include IME.ahk

#IfWinActive, ahk_class "Window Spy で調べたクラス名"
{
  Ctrl & J::
    mode := IME_GetConverting()
    if (mode == 2)
    {
      Send, {Esc}
      return
    }
    Send, {Esc}
    IME_SET(0)
    return
}

入力中は IME_GetConverting() で 1 を返すようにしないといけないと思うけど、常に 2 が返るようになってしまってる。けど、僕は困ってない(今のところ)ので大丈夫じゃないかと。