自分が削除されたことを秀丸に通知する方No.08556
でるもんたいいじま さん 17/09/13 13:38
 
でるもんた・いいじまです。

【背景】

保存済みのファイルの内容をぜんぶ別の場所(たとえばWeb上のフォームや、
Excelのシートなど)に転記して、そのファイル自体が不要になった際、
秀丸の画面上で、そのファイルを削除したくなることがあります。
(これは完全削除したいケースと、念のためゴミ箱に入れておきたい
 場合とがあります。)

もちろん、内容を空にして上書き保存をすれば
  「memo.txt - は空のファイルです。
   削除しますか?」
と訊いてきますが、そこでYESを選んでも、.bak ファイルが残ってしまいます。

そのため、.bak ファイルすら残ってほしくないときにはタスクバーの秀丸
アイコンをゴミ箱に drag & drop しているのですが、画面が狭いので、
デスクトップ上で複数のウィンドウを畳んでゴミ箱アイコンを露出させる
のが面倒です。
(これはこれで、ゴミ箱へのショートカットを作って、それをスタート
 メニューに入れておくなりショートカットキーを設定しておくなり
 すれば一応何とかなる話ではあるのですが、それも少々面倒です。)

【マクロ1】
マクロで
deletefile filename2, 0; //完全削除の場合
deletefile filename2, 1; //ゴミ箱の場合
を試してみましたが、どちらもファイルは削除されず、resultが0になります。

【マクロ2】
下記のマクロで、「ファイルを削除する」という目的はいちおう達せられました。

//------------------------------ ゴミ箱へ -----------------------------
// $$1: ゴミ箱に送るべきファイル
//---------------------------------------------------------------------
Delete_recycle:
#oShApp = createobject("Shell.Application");
#oNS = callmethod_returnobj( #oShApp, "Namespace", 10);
callmethod #oNS, "MoveHere", $$1;
return;

//----------------------------- 完全削除 ------------------------------
// $$1: 削除すべきファイル
//---------------------------------------------------------------------
Delete_complete:
#oFSO = createobject("Scripting.FileSystemObject");
// ファイル名のあとの引数「1」は「read-onlyでも強制削除」の意味
callmethod #oFSO, $$1, 1;
return;

【質問】
秀丸のウィンドウをゴミ箱に D&D した場合には、即座に
  「ファイルが削除または移動されました。
   破棄して終了しますか?」
という表示が出て、そこでYESを選べば即座に秀丸が閉じてくれるのですが、
上記のマクロで削除した場合、この表示が出てくれません。

上記のマクロ(またはその代替になるマクロ)からこの表示を出すためには、
どうすればいいのでしょうか?
秀丸の設定だけでそういうことができればそれがベストですし、マクロ中で
別途のCOM呼び出しをすれば解決する、ということでも構いません。
もうひとつ別のファイル(バッチファイルなりWSHなり)を生成する解法は、
もし避けられるのであれば避けたいです。

[ ]
RE:08556 自分が削除されたことを秀丸に通No.08557
秀丸担当 さん 17/09/13 17:35
 

秀丸エディタの機能として、ウィンドウの左上のアイコンをドラッグすることが
でき、ファイルが無くなった場合にメッセージが出ます。
この動作と全く同じことをマクロでやることはできないです。
秀丸エディタとしてはドラッグしてから数秒間、タイマーでファイル存在を確認
する特殊な動作をしています。
しいてマクロでやるとしたら、sleepでループしつつファイルの存在をexistfile
でチェックするということになると思います。

deletefileができないということですが、もし動作環境の排他制御が設定されて
いてできないとうことでしたら、closenewで閉じた状態にしてからdeletefileす
るといいと思います。
$f=filename;
//(必要な場合)clearupdated;
closenew;
deletefile $f;


ちなみに参考までの情報として、手動で似たような操作をする場合、「エクスプ
ローラ」コマンドを実行するとエクスプローラまたは秀丸ファイラーClassicで
ファイルの選択までがされるので、そこで手動の削除操作がしやすいです。
「エクスプローラ」コマンドは、メニュー編集では「ツール」メニュー、キー割
り当てでは「その他」系にあります。

[ ]
RE:08557 自分が削除されたことを秀丸に通No.08558
でるもんたいいじま さん 17/09/13 18:53
 
でるもんた・いいじまです。

> 秀丸エディタの機能として、ウィンドウの左上のアイコンをドラッグ
> することができ、ファイルが無くなった場合にメッセージが出ます。
> この動作と全く同じことをマクロでやることはできないです。
> 秀丸エディタとしてはドラッグしてから数秒間、タイマーでファイル
> 存在を確認する特殊な動作をしています。

なるほど、ハードコードでしたか。了解しました。

> deletefileができないということですが、もし動作環境の排他制御が
> 設定されていてできないとうことでしたら、closenewで閉じた状態に
> してからdeletefileするといいと思います。
> $f=filename;
> //(必要な場合)clearupdated;
> closenew;
> deletefile $f;

うーむ。動作環境の「ファイル→排他制御1」では特に排他制御をしない
ようになっているんですよね…なんでだろう。もう面倒なので、COMで
削除したあとに changename ""; してしまうことにしてしまいました。
(さすがに無条件でquitするのは間違えたときに恐いので。)

> ちなみに参考までの情報として、手動で似たような操作をする場合、
> 「エクスプローラ」コマンドを実行するとエクスプローラまたは
> 秀丸ファイラーClassicでファイルの選択までがされるので、
> そこで手動の削除操作がしやすいです。

ありがとうございます。フォルダ内のファイル数がかなり多いので、
ちょっとこれは合わなかったです。せっかくご紹介いただいたのに
申し訳ありません。

[ ]