秀丸エディタで使いやすいファイルヒストリ(最近使ったファイル)を実現するマクロ

秀丸エディタにはファイルヒストリ機能があり、最近使ったファイルに素早くアクセスできるが、これが少し使いづらい。不満として以下があった。

  • メニューアクセラレータを自由に設定したい
  • フォーマットにもう少し融通を利かせたい
  • キー割り当てから一発で呼び出したい
  • 「ファイルヒストリのつづき」 ← これは要らない、一段で一気に表示してほしい

このあたりを解消するためマクロをつくった

マクロ

// [使いやすいファイルヒストリメニュー]
// 秀丸エディタ内蔵のファイルヒストリはフルパス表記のため読みづらく、
// またメニューアクセラレータもカスタマイズできません。
// このマクロを使うと、そのあたりをカスタマイズできます。
//
// デフォルトでは以下フォーマットで表示します。
//   (番号): (ファイル名)
// また、メニューアクセラレータはファイル名先頭文字を割り当てます。
// (これにより文字キーでファイル名を選択できるようになります)
//
// 他のフォーマットにカスタマイズしたい場合は
// このマクロを適当にいじってください (^^;
//
//
// [このマクロの動作に必要なこと]
// ・ファイルヒストリの記録を有効にする
//   → その他 > 動作環境 > 設定の対象 > ファイル > ヒストリ
//      「つづきも記録」にチェックを入れてください

#i = 0;
#SEARCH_UPPER_COUNT = 100;
while(#i < #SEARCH_UPPER_COUNT){
    $hist_fullpath = getfilehist(#i);
    #last_delim_pos = strrstr($hist_fullpath, "\\");
    if(#last_delim_pos == -1){
        break;
    }
    $hist_filename = midstr($hist_fullpath, #last_delim_pos + 1);

    // メニュー項目表示用文字列を整える.
    // とりあえずファイル名ベースで番号とアクセラレータ付けてみる.
    $index_for_display = str(#i);
    if(strlen($index_for_display)==1){
        $index_for_display = "0" + $index_for_display;
    }
    $hist_filename_with_accel = "&" + $hist_filename;
    $array_for_display[#i] = $index_for_display + ": " + $hist_filename_with_accel;

    // 実際に開くフルパスも保持しとかないと後で取り出せない.
    $array_for_opening[#i] = $hist_fullpath;

    #i = #i + 1;
}
#actual_item_count = #i;

if(#use_mouse_pos==true){
    mousemenuarray $array_for_display, #actual_item_count;
}else{
    menuarray $array_for_display, #actual_item_count;
}

if(result==0){
    endmacro;
}

#selected_id = result - 1;
$selected_fullpath = $array_for_opening[#selected_id];
$selected_fullpath_with_surround = "\"" + $selected_fullpath + "\"";
$editor_fullpath = hidemarudir+"\\hidemaru.exe";
$editor_fullpath_with_surround = "\"" + $editor_fullpath + "\"";

$tha_last_commandline = $editor_fullpath_with_surround + " " + $selected_fullpath_with_surround;
//message $tha_last_commandline;
run $tha_last_commandline;

解説

解説はマクロ内にコメントで書いたのでそちらを読んでください。

インストール方法などは割愛(既に秀丸エディタマクロに習熟しているものとする)。

作者の使い方

私は Ctrl + H に割り当てて使っている。H は History の H。

これを呼び出す時はたいてい開きたいファイル名がわかっているので、Ctrl + H でメニューを開いた後、文字キー一文字目を押してリーチできることが多い。素早い。便利。

資料

秀丸エディタの仕様など今回調べた情報をまとめておく。

ファイルヒストリの保存件数

実は 可変 である。

ヘルプによると、

記録できる個数は、ファイル名の長さによって変化します。(目安:フルパスで半角50文字で約50個)

ファイルヒストリの実体

レジストリに記録されている。

キー:

  • HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Hidemaru.dat\FileHist

エントリ:

  • 000
    • REG_BINARY
    • ファイルのフルパスを記録
  • 001
    • 同上
  • 002
  • ...
  • c
    • REG_DWORD
    • エントリ xxx の上限数を記録
    • たとえば上限が 69 個なら 69 が記録される(実際は 16 進数なので 45 だけど(
      • 000 ~ 068 まで存在することになる