basyura's blog

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

AutoHotKey をつかって VisualStudio + ViEmu の環境で Esc 時に IME を OFF にする

Visual Studio + ViEmu + AutoHotkey で insert モードを抜けるときに IME を OFF にする ではだめだった。ask_class が変わってしまうので、ウインドウタイトルで判定するようにしたら幸せになれた。

#InstallKeybdHook
#Include IME.ahk
#USEHOOK

SetTitleMatchMode,2

#IfWinActive, Microsoft Visual Studio
{
  Ctrl & J::ime_off()
}

#USEHOOK off

ime_off() {
    if (is_under_input())
    {
      Send, {Esc}
      return
    }
    Send, {Esc}
    IME_SET(0)
}

is_under_input() {
    mode := IME_GetConverting()
    if (mode == 2)
    {
      return true
    }
    return false
}

関数の定義方法がいまいち分かってない。
関数の引数で Key を引数で受けて、条件判定して Send したい。