2012年11月25日日曜日

AutoHotkeyを使ってTeraTerm + vimを快適にする


Esc押したらIMEをオフにしてくれれば良いので以下のような設定にした
あと、無変換キー+Rでsudoしてくれる設定も追加しておいた

AutoHotkey.ahk
; teraterm = VTWin32
#IfWinActive ahk_class VTWin32
$Esc::
IME_SET(0)
Send {Esc}
return
vk1Dsc07B & R::
Send,{Blind}sudo -s{Enter}
Sleep,500
Send,{Blind}hogepasswd{Enter}
return
#IfWinActive
IME_SET(SetSts, WinTitle="A") {
ControlGet,hwnd,HWND,,,%WinTitle%
if (WinActive(WinTitle)) {
ptrSize := !A_PtrSize ? 4 : A_PtrSize
VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
NumPut(cbSize, stGTI, 0, "UInt") ; DWORD cbSize;
hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
}
return DllCall("SendMessage"
, UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
, UInt, 0x0283 ;Message : WM_IME_CONTROL
, Int, 0x006 ;wParam : IMC_SETOPENSTATUS
, Int, SetSts) ;lParam : 0 or 1
}
view raw AutoHotkey hosted with ❤ by GitHub

注意点としてはEscがEscを再帰的に呼んで無限ループするので、Escの頭に$を付ける必要があること


IMEのOn/Offの切り替えはえらい人がスクリプトを作ってくれていたので、そっちからコピペ
http://www6.atwiki.jp/eamat/pub/MyScript/Lib/

参考リンク
https://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/index

2 件のコメント:

いわもと こういち さんのコメント...

Tera Termを使っている場合は、以下のような方法も有ります。
これだとTera Termとvimの機能だけしか使わないので、AutoHotkeyが入っていない環境で便利だと思います。
http://ttssh2.sourceforge.jp/manual/ja/usage/tips/vim.html#IMEcontrol

yaasita さんのコメント...

コメントありがとうございます
tmux + vimだと上記方法で解除できなかったんですよね・・・
何か設定のために必要な情報って他にないのでしょうか?