rcmdnk's blog

20171114_vimahksettings_200_200

vim_ahk の設定にアプリの変更も出来る様にしました。

これでスクリプトをいじらずに有効にしたいアプリを変更できますし、 exeファイルとして実行したときも変更が可能になりました。

vim_ahkの設定

この前チェックボックスなどを使ってメッセージのverbose levelなどを変更したり 出来る様にしましたが設定を有効に出来る アプリの選択も出来る様にしました。

vimahksettings

こんな感じのEdit枠を作って、各行に一つアプリのタイトルとかクラスとかを書きます。

WinTitle & Last Found Window

クラス名とかはトレイアイコンの右クリックから開けるWindow Spyで調べられます。

Window Groupを実行中に変更する

AutoHotkeyでは

1
2
GroupAdd, VimGroup, ahk_exe notepad.exe
GroupAdd, VimGroup, ahk_exe wordpad.exe

の様にグループを設定して、

1
#If WInActive("ahk_group VimGroup")

または

1
#IfWInActive, ahk_group VimGroup

の様にしてグループでまとめてそれがアクティブかどうかのチェックをしたり出来ます。

ただAutoHotkeyにはGroupAddはありますが、GroupDeleteの様な グループから除く様なコマンドはありません。 なのでグループを一度実行してから変更することは、加えることは簡単ですが 削除することは簡単にはできません。

そこで、名前に番号を付けてグループを変更するたびに番号を変更して 新しいグループとして作成し、 IfWinActiveでもその名前でチェックする様にするとグループ変更が可能になります。

Is there any way to destroy (delete) a window group - Ask for Help - AutoHotkey Community

vim_ahkの中では下記の様な感じでやっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
VimGroupDel := ","
VimGroupN := 0

VimGroupIni := "ahk_exe notepad.exe"   ; NotePad
VimGroupIni := VimGroupIni . VimGroupDel . "ahk_exe wordpad.exe"   ; WordPad
VimGroupIni := VimGroupIni . VimGroupDel . "ahk_exe TeraPad.exe"   ; TeraPad
...
VimGroup := VimGroupIni
...
VimReadIni()
...
VimSetGroup()
...
Return
...
VimSetGroup() {
  global
  VimGroupN++
  VimGroupName := "VimGroup" . VimGroupN
  Loop, Parse, VimGroup, % VimGroupDel
  {
    if(A_LoopField != ""){
      GroupAdd, %VimGroupName%, %A_LoopField%
    }
  }
}
...
#If WInActive("ahk_group " . VimGroupName)
...

VimGroupNという番号を新しくグループを作るたびに更新して VimGroupNameを新しくしています。 #If WInActiveの中でもVimGroupNameという変数を使っているので VimSetGroupの中で変更されるとそこも反映されます。

設定ファイルに改行のある文字列を書き出すと上手くいかない

上の例でVimGroupDelという変数でアプリの区切りを指定してますが、 Guiでは全て改行で区切る様に表示しています。

実際、Settingsに表示する時にStringReplaceを使って 書き換えを行っていますが、 最初は改行の入った文字列のまま書き出してました。

が、どうも上手く動かないと思って書き出されたファイルを見てみると 改行(`n)が空白になって、さらに次に書き込まれるものを 挟むような感じになってしまっていました。

1
2
3
4
5
VimGroup=ahk_exe notepad.exe`nahk_exe wordpad.exe`n,ahk_exe TeraPad.exe...
VimRestoreIME=1
VimJJ=0
VimIcon=1
VimVerbose=1

みたいになって欲しいのですが、

1
2
3
4
5
VimGroup=ahk_exe notepad.exeVimRestoreIME=1
VimJJ=0
VimIcon=1
VimVerbose=1
ahk_exe wordpad.exe ahk_exe TeraPad.exe...

みたいな感じになってました。

書き出すタイミングをSleepで間を開けてみたりしても上手く生きませんでした。

加えて読み込むときも既に改行ではないので駄目です。

ということで改行区切りをそのまま出力するのは辞めてコンマ区切りに変更して出すようにしました。

Edit枠を最初に持ってくるとフォーカス状態になる

今の設定では一番上にチェックボックスがありますが、 最初はアプリの設定を一番上に持ってきてました。

アプリの設定はEditを使ってますがこれが一番上にあると こんな感じで選択された状態になってしまいました。

vimahksettings0

この状態でも実際にフォーカスがあたってるのは下のボタンで すぐにReturnを押すとOKを押します。

なので実質的には問題は無いのですが、 見た目的にあれなので順序を変えました。

Sponsored Links
Sponsored Links

« .vimrc見直しの一環としてカラースキームプラグインを作った NeovimでLatexファイルを開く時にエラーが出る »

}