秀丸エディタでファイルマネージャ枠を自動で同期する

秀丸エディタのファイルマネージャ枠(エクスプローラ枠)は便利だが、表示内容が自動で同期されないのが不便だった。自動で同期する方法を見つけたのでまとめる。

方法

  • [マクロ] > [マクロ登録] > [自動起動] > [自動起動マクロを有効にする]
  • [アクティブ切り替え後] を有効にして、以下マクロを指定
loaddll "HmExplorerPane.dll";
#get_1_if_pain_opened = dllfunc("GetMode",hidemaruhandle(0));
if(#get_1_if_pain_opened!=1){
    endmacro;
}

#h = dllfunc("GetWindowHandle", hidemaruhandle(0) );
// 252 同期
#ret = sendmessage(#h, 0x111, 252, 0);

解説

自動同期は以下の二段階で実現する。

  • (1) ファイルマネージャ枠の同期処理を行うマクロをつくる
  • (2) 秀丸エディタに「タブが切り替わる度に指定マクロを実行する」的な仕組みがあるので、ここに 1 を指定する

マクロ解説

loaddll "HmExplorerPane.dll";

これはファイルマネージャ枠を使う際の決まり文句。

#get_1_if_pain_opened = dllfunc("GetMode",hidemaruhandle(0));
if(#get_1_if_pain_opened!=1){
    endmacro;
}

これはファイルマネージャ枠が表示されているかどうかを調べ、されていないならその場で終了する処理。

このような判定を行っておくと、ファイルマネージャ枠を使っていない時に同期処理が走らず無駄がない。

#h = dllfunc("GetWindowHandle", hidemaruhandle(0) );
// 252 同期
#ret = sendmessage(#h, 0x111, 252, 0);

これはファイルマネージャ枠の同期処理を行う。DLL に実装された機能を呼び出す、という使い方になるので表記が多少煩雑。値 252 の部分など、詳細はマクロヘルプを調べたら載ってある。

使い心地

秀丸エディタにこもっている間は使いやすい。自動で同期されるから。

別のウィンドウと切り替えながらだと使いづらいかも。秀丸エディタをアクティブにする度に自動同期が走るので、ファイルマネージャ枠中で別フォルダを開いていた場合も(自動同期されてしまい)カレントディレクトリに戻されてしまう