setfilehist 文が効いていない?No.08598
dszhm さん 17/12/06 09:14
 
OS: Win 7 Pro 64 bit SP1
秀丸: 8.75 64bit Float
です。

題記のとおり、マクロ中で setfilehist 文を実行して、マクロ終了後ファイルメニ
ューからファイルヒストリを見ても、setfilehist 文で設定した分が反映されていま
せん。
関係無いかもしれませんが、envchanged 文を入れても同じでファイルヒストリには
反映されていませんでした。

[ ]
RE:08598 setfilehist 文が効いていない?No.08599
秀丸担当 さん 17/12/06 10:04
 

幾つかのパターンを試してみたこちらで試してみたところ、設定に失敗するケー
スがありました。

以下のような使い方の場合は、あからじめヒストリが存在しているときにそれを
置き換えます。
setfilehist 0, "c:\\folder\\test1.txt";//1番目に設定
setfilehist 1, "c:\\folder\\test2.txt";//2番目に設定
例えば、全て削除した後などは置き換えるものが無いので失敗します。

以下の使い方は常に動作します。
setfilehist -1, "c:\\folder\\test_insert1.txt";//最初に挿入
setfilehist -1, "c:\\folder\\test_insert2.txt";//最初に挿入

以下の場合は、ヒストリがいっぱいの場合は追加されません。
setfilehist -2, "c:\\folder\\test_add1.txt";//最後に追加
setfilehist -2, "c:\\folder\\test_add2.txt";//最後に追加
幾つか削除するか、全て削除した後は追加されます。
全て削除した後に復元するような使い方であれば、-2のほうが向いています。

こういったケースのどれかと思うのですが、そうでないとしたら具体的な使い方
を教えていただけると何かわかると思います。
また失敗するケースがあることをヘルプに追記と、失敗したかどうかがわかるよ
うにする方法を検討したいと思います。

[ ]
RE:08599 setfilehist 文が効いていない?No.08600
dszhm さん 17/12/06 10:30
 
>以下のような使い方の場合は、あからじめヒストリが存在しているときにそれを
>置き換えます。
>setfilehist 0, "c:\\folder\\test1.txt";//1番目に設定
>setfilehist 1, "c:\\folder\\test2.txt";//2番目に設定
>例えば、全て削除した後などは置き換えるものが無いので失敗します。

作成&テスト中のマクロは、この形式です。
「ファイル/フォルダの履歴の削除」後に実行すると失敗するようです。

>全て削除した後に復元するような使い方であれば、-2のほうが向いています。
>
>こういったケースのどれかと思うのですが、そうでないとしたら具体的な使い方
>を教えていただけると何かわかると思います。

プログラムやスクリプトのテスト等で、ログファイルを含めて多くのファイルを開く
ことになるわけですが、
その前に別のマクロでヒストリを退避しておいて、作業が終了した時にヒストリを戻
す為に使いたいのです。

[ ]
RE:08600 setfilehist 文が効いていない?No.08602
秀丸担当 さん 17/12/06 11:43
 

改めて調べてみて、V7.xx以下では全て消した後でも、
setfilehist 0,"c:\\folder\\test1.txt";
というように番号指定でできていました。V8.xxではファイルヒストリの続きが
ある影響で、全てヒストリを削除した後はできなくなっていました。
番号指定でもできるようになるべきだと思います。
できるように修正したいと思います。

あと、現状でsetとgetしかなくて、ヒストリを全て削除する操作と全く同じこと
や、ヒストリの数を知ることなどができないので、できるべきだと思います。
今後のバージョンで方法を検討したいと思います。

削除に相当する操作は、V7.xx以下でも、
setfilehist 0,"";
として空の文字列を渡すことで消すというようなことになっていましたが、V8.
xxでも、同じようにしておくと存在はするけど内容が無い状態で、直接番号指定
はできました。

現状で、あらかじめ""をたくさん追加しておいて、以下のような感じにすると、
ヒストリを全て削除した後でも直接番号指定ができると思います。

#i=0;
while(#i<100){
 setfilehist -2,"";
 #i=#i+1;
}
setfilehist 0,"c:\\folder\\test1.txt";
setfilehist 1,"c:\\folder\\test2.txt";

[ ]
RE:08602 setfilehist 文が効いていない?No.08604
秀丸担当 さん 17/12/06 12:23
 

参考までの情報として、マクロ内でヒストリが変化するのを防ぐには、
disablehistory文を使って実行中はヒストリを更新しないようにする方法があり
ます。

または、マクロ実行中以外でも頻繁に変わる作業をするときは、「ヒストリの記
録を中断」コマンドで停止状態にしておく方法もあります。
「ヒストリの記録を中断」コマンドは、キー割り当てやメニュー編集する必要が
あります。メニューの場合は[その他]→[メニュー編集]で、「ファイル(F)」メ
ニューの中にあります。

[ ]
RE:08604 setfilehist 文が効いていない?No.08606
dszhm さん 17/12/06 19:25
 
>マクロ実行中以外でも頻繁に変わる作業をするときは、
>「ヒストリの記録を中断」コマンドで停止状態にしておく方法もあります。

これだと、ログを確認してスクリプト修正したり、の時に
秀丸のファイルヒストリが使えない、ということですよね。
それは不便なことが少なくない気がします。

>番号指定でもできるようになるべきだと思います。
>できるように修正したいと思います。
>ヒストリを全て削除する操作と全く同じことや、
>ヒストリの数を知ることなどができないので、
>できるべきだと思います。
>今後のバージョンで方法を検討したいと思います。

とコメントしておられるので、将来的にはできるようになるかもしれませんが、
現状だと、手動で「ファイルヒストリの消去」をした後、

setfilehist -1, "履歴の1番目に古いファイル";//最初に挿入
setfilehist -1, "履歴の2番目に古いファイル";//最初に挿入

setfilehist -1, "履歴の2番目に新しいファイル";//最初に挿入
setfilehist -1, "履歴の1番目に新しいファイル";//最初に挿入

のようになるように、するしかないようですね。

[ ]
RE:08606 setfilehist 文が効いていない?No.08607
秀丸担当 さん 17/12/07 08:25
 

言われている通り、現状では-1で逆順にすると確実だと思います。

現状だと、あらかじめ以下のように""を追加しておいても、できると思います。

#i=0;
while(#i<100){
 setfilehist -2,"";//最後に追加
 #i=#i+1;
}
setfilehist 0, "履歴の1番目に新しいファイル";
setfilehist 1, "履歴の2番目に新しいファイル";

ただレジストリに保存されるのは100個までですが、メモリ上にはファイル名が
短い場合は一時的に100個より多くなる場合があったり、""が大量にあると扱え
る上限が減ったりして、取り扱いが面倒でした。

今後のバージョンでは、上記の対策を入れなくてもできるようにしようと思いま
す。

[ ]
RE:08602 setfilehist 文が効いていない?No.08609
dszhm さん 17/12/27 07:58
 
>番号指定でもできるようになるべきだと思います。
>できるように修正したいと思います。
>
>あと、現状でsetとgetしかなくて、ヒストリを全て削除する操作と全く同じこと
>や、ヒストリの数を知ることなどができないので、できるべきだと思います。
>今後のバージョンで方法を検討したいと思います。

 8.79 beta 3 で該当機能の動作確認をさせていただきました。

[ ]