起動時マクロ&ワークスペース機能ON時の挙動について

  1. Kuroさん

    開発お疲れさまです。
    起動時マクロ関連でご報告です。

    Mery Ver: 3.2.6

    「ワークスペースを保存、復元する」をONにしているとき、「/mf "MacroFileName"」を使った起動時に空の「無題-*」タブが作られてしまうようです。

    ワークスペース機能OFFのときにはタブが作られるのは正しい動きだと思いますが、ワークスペース機能ONの場合には前回開いていたファイルなどが復元されるため、空の「無題-*」タブは不要だと思います。

    お暇なときにご確認いただければ嬉しいです。

    PS.
    自動保存フォルダーにまとめた保存済みファイル達のうち、一定期間経過したファイルを削除するクリーンアップ的なマクロを作りまして、「起動時イベントとかで実行できたら最高だけどな…」と考えていたらこのオプションを見つけました。このMeryの、「かゆいところに手が届く」感じ、流石でした。

     |  yuko  |  返信
  2. ご報告ありがとうございます。

    /mf オプションについてですが、ご報告いただいた動作は想定された仕様によるものですね。

    まず、Mery のマクロは文書 (document) に対して実行されますので、必ず対象となる document が必要となります。

    もし、ワークスペースが復元されたあとに「無題」のタブを作成せずにマクロが実行されてしまうと、マクロがどの document を対象に実行されるかわかりませんから、ランダムな文書、または最後に開かれた文書を対象にすることになってしまいます。

    それだと都合が悪いので、/mf オプションは以下のような 2 つの動作を想定した仕様となっています。

    (1) 実行するマクロのみを指定する場合

    Mery.exe /mf "マクロファイル"

    この場合、「無題」のタブを作成してそのタブに対してマクロを実行します。起動中の Mery の有無、ワークスペースの有無にかかわらず新たに「無題」のタブを作成し、そのタブに対してマクロを実行します。

    (2) 実行するマクロと実行対象のファイルを指定する場合

    Mery.exe /mf "マクロファイル" "対象のファイル"

    この場合、「対象のファイル」を開く、または既に開かれている場合はそのタブに対してマクロを実行します。

    今回のケースは (1) に該当しますが、「一定期間経過したファイルを削除するクリーンアップ的なマクロ」ということなので、たまたま document オブジェクトを使う必要がなかったので「無題」のタブいらね。と思われたのではないかと思います。

    起動時マクロの用途としては、何かしらの結果を新規で「無題」のタブ (document) に表示させたり、「対象のファイル」に対してマクロで処理したりといった用途を想定しているため、このような仕様となっていますのでご了承いただければと思います。

    > 自動保存フォルダーにまとめた保存済みファイル達のうち、一定期間経過したファイルを削除

    その機能につきましては、私も開発当時、色々と考えました。

    HDD 大容量化な時代ということもあって [自動保存] 機能はユーザーさんが意図的に保存を行いたい場合に使うもの。[バックアップ] 機能はユーザーさんが意図しないクラッシュなどに備えてのもの。

    としまして、[自動保存] は制限なしで保存されるようになっていますが、[バックアップ] のほうは隠しオプションでローテーション機能が用意されています。

    Mery.ini

    [Backup]
    BackupMaxCount=5

    あわせて [同名のファイルが存在する場合はファイル名を変更する] をオンにすることで効果がでます。

    一定期間ではなく一定個数ですが、用途に合えば何かのお役に立てるかもしれません。…が、ご希望の動作と違ってたらスミマセン ^^;

     |  Kuro  |  返信
  3. Kuroさん

    ご返信ありがとうございます。

    仕様ということで理解しました。たしかにMeryマクロだから当然、document が無ければいけませんね。仰るとおり、今回はたまたま document を扱うマクロではないために盲点になってしまいました…😅
    すみません、お手間をおかけしました。

    > HDD 大容量化な時代ということもあって [自動保存] 機能はユーザーさんが意図的に保存を行いたい場合に使うもの。[バックアップ] 機能はユーザーさんが意図しないクラッシュなどに備えてのもの。

    お察しいただいているかもしれませんが、私の目的は後者、「意図しないクラッシュに備えてのもの」ですね。
    ただしそれに加えて以下の点があるのが、Kuroさんの想定とは異なるかもしれません。

    - ファイル保存する前の無題タブも対象としたい
    - 上書き保存前の編集中の状態もある程度(5分前程度)は復旧したい
    - 一定期間を過ぎたバックアップは、もう使わないものと見做して消していきたい

    バックアップ機能ONにしてこまめにファイル保存すればいいじゃないか、というのもごもっともなんですが、ちょっとしたメモテキストを保存してはすぐ消す、みたいな操作をしたくなくて…
    そのため、ワークスペース機能で「元に戻す情報を保持する」「終了前にファイルの保存を確認しない」が重宝しています。保存するほどでもないメモ・草稿などを無題タブで書き散らかしている状況です。(こまめにタブ閉じしてお掃除してますが)

    その状態で使うことに慣れ、私の使い方ではファイルを保存する機会がかなり減りました。
    それゆえ、「意図しないクラッシュ」に弱い(クラッシュすると「元に戻す情報」は保存されないので)状況になってしまったので、定期的にバックアップを取りたい→自動保存機能だ!となったわけです。

    document の話を教えていただいてハッとしたのですが、無条件で無題タブが開いてしまうことが分かっていれば、document の数が2つ以上のときに document.Close() をしてしまえば良さそうですね。それで今回やりたい挙動は実現できそうです。

    > 一定期間ではなく一定個数ですが、用途に合えば何かのお役に立てるかもしれません。…が、ご希望の動作と違ってたらスミマセン ^^;

    いえいえ、ローテーション機能を知られてよかったです。色々と使い方を工夫していくうちに手を出しそうな気がしています。
    良い機能なので、隠し機能にしておくのは勿体ない気もしますが、やや高度な機能感もあって表に出すか悩ましい感じですね。

     |  yuko  |  返信
  4. ご返信ありがとうございます。

    > ワークスペース機能で「元に戻す情報を保持する」「終了前にファイルの保存を確認しない」が重宝しています。保存するほどでもないメモ・草稿などを無題タブで書き散らかしている状況です。

    なるほど、状況は分かりました。

    ワークスペース機能は [無題] を多用するメモ的な用途ではなく、前回の状態をできるだけ復元するための機能なので、テキストエディターの一般的な使い方に基づいて、編集中のファイルもそれなりの頻度で [上書き保存] が実行されていることが前提となっています。

    保存を実行した状態でアプリケーションを閉じるとワークスペース機能は元に戻す情報を破棄してワークスペースのデータはクリーンアップされます。

    …が、[元に戻す情報を保持] で [無題] のタブを保存せずに編集し続けていると、元に戻す情報がどんどん溜まっていきます。

    Mery はエディターエンジンの仕様上、元に戻すの回数に上限がありませんから、上記のような使い方でワークスペースの復元を繰り返していくと元に戻す情報が破棄されるタイミングがないのでどんどん肥大化していきメモリを食いつぶしてしまう気がします。

    (それで別件でいただいたワークスペースの保存に時間がかかっていたのですね。普通の使い方だと 1 万行の編集でも元に戻す情報の保存はほぼ一瞬で終わるので、どれだけ元に戻す情報が溜まっているのだろう?と思ってました)

    私も、保存不要なメモ的に使える機能は欲しいと思ったことはあって、プラグインとして開発していたのですが、結局、需要なさそうかと思ってその技術だけ応用して作ったのがプロ生ちゃんプラグインだったりします ^^;

    とりあえず、document.Close() でご対応いただけるとのことで了解いたしました。あと、こまめにタブを閉じてお掃除は使い方として正解ですね。

    ふと思ったのですが、別に Mery のマクロでやらなくても Windows のバッチでクリーンアップする処理を実行した後に Mery.exe を呼び出すような処理を書けば良いような気が…

     |  Kuro  |  返信
  5. > Mery はエディターエンジンの仕様上、元に戻すの回数に上限がありませんから、上記のような使い方でワークスペースの復元を繰り返していくと元に戻す情報が破棄されるタイミングがないのでどんどん肥大化していきメモリを食いつぶしてしまう気がします。

    なるほど、これまた盲点でした…。
    ということは無題タブだけでなく、例えば「"今日のタスク.txt"として保存しているファイルは毎朝開くから、ワークスペース機能で起動時に開くようにしてる」といったケースの場合、"今日のタスク.txt"は起動時から終了まで常にタブ上に存在していますから、「元に戻す情報」も肥大化し続けるということです?
    そうなると、できるだけ軽量に扱うには「元に戻す情報」はOFFにするか、どんなタブであれ使用しないときは閉じた方がよさそうですね。

    > 私も、保存不要なメモ的に使える機能は欲しいと思ったことはあって、プラグインとして開発していたのですが、結局、需要なさそうかと思ってその技術だけ応用して作ったのがプロ生ちゃんプラグインだったりします ^^;

    私もあの感じ(保存不要メモ)が好きだったんです。
    ただ使ってるうちに、デスクトップに付箋を貼るより、1枚のウィンドウに複数のタブがあるいつもの状態が個人的には扱いやすいのが分かってきたので、ワークスペース機能に落ち着きました。

    > ふと思ったのですが、別に Mery のマクロでやらなくても Windows のバッチでクリーンアップする処理を実行した後に Mery.exe を呼び出すような処理を書けば良いような気が…

    これもまた拘りというか、わがままなのですが、タスクバーに登録しているMeryを実行するだけで起動時マクロが発動する状況にしたかったんです。(タスクバーの1番左側にMeryを添えておけば [Windowsキー+1キー] でサクッと起動できるので)
    そして、タスクバー上のMeryアイコンからプロパティを開けばショートカットリンクの編集でコマンドラインオプション(起動時マクロ)も設定できるので、そこに設定していました。

    ただ、頂いた情報を鑑みて、「元に戻す情報」に頼らない運用を考えた方がいいかもなぁ…と思い直しているところです(こういうワークフローを考えるのは楽しいのでいいのですがw)

     |  yuko  |  返信
  6. 自動保存まわりの設定をいじっていたら、バグっぽい動きに遭遇してしまいました。

    1. Mery 配置フォルダに AutoSave というフォルダを用意する
    2. 自動保存フォルダの設定で「.\AutoSave」と相対パス指定をする
    3. OK で設定画面を閉じ、続けて Mery も×ボタンで閉じる
    →このとき、Mery.ini 上には「.\AutoSave」で出力される
    4. 再度 Mery を起動し、自動保存フォルダの設定を見ると「[Mery配置フォルダ]\AutoSave」という絶対パス表記になっている
    5. 何も変更せず OK で設定画面を閉じる
    →このとき、Mery.ini 上には「AutoSave」で出力される(相対パスだが3のときの".\"が消えてる)
    6. 自動保存機能でファイル保存がされると、対象ファイルの保存場所と同じ階層に「AutoSave」フォルダが作成され、その中に自動保存されたファイルが置かれる

    上記のような動きをしていましたが、期待の動作としては以下の通りです。

    ・4の表示は相対パス「.\AutoSave」
    ・5の Mery.ini への出力は「.\AutoSave」
    ・6の自動保存先は、1で作成した Mery 配置フォルダ内の「AutoSave」フォルダ

     |  yuko  |  返信
  7. ご返信ありがとうございます。

    > 例えば「"今日のタスク.txt"として保存しているファイルは毎朝開くから、ワークスペース機能で起動時に開くようにしてる」といったケースの場合、"今日のタスク.txt"は起動時から終了まで常にタブ上に存在していますから、「元に戻す情報」も肥大化し続けるということです?

    そういうわけでもないですが、Mery を終了するときに更新マークの「*」がついているタブは「元に戻す情報」が保存されます。

    つまり「無題」タブの場合ですと、常に「*」がついているわけですからワークスペースの保存・復元をするたびに、最初から最後までの元に戻す情報がすべて保存、復元されるのを繰り返すことになり、肥大化する一方になってしまいます。

    "今日のタスク.txt" のように Mery を終了する前 (ワークスペースが保存されるとき) に上書き保存した場合は、元に戻す情報はその時点で一度、破棄されるので大丈夫です。

    > 私もあの感じ(保存不要メモ)が好きだったんです。

    evernote や mac のメモ帳のような感じの保存不要メモ的なやつですね。今後の開発の参考にさせていただきたいと思います。

    > タスクバーに登録しているMeryを実行するだけで起動時マクロが発動する状況にしたかったんです。(タスクバーの1番左側にMeryを添えておけば [Windowsキー+1キー] でサクッと起動できるので)

    Windows キー + 数字キーは初めて知りました。こんな便利な機能があったのですね。なるほど、そうなるとやはりマクロでどうにかするしかなさそうですね。

    > 自動保存まわりの設定をいじっていたら、バグっぽい動きに遭遇してしまいました。

    ご報告ありがとうございます。

    これには心当たりがありました。ちょっと個人的に便利そうだと思って仕込んでいた隠し要素が影響しているようです。

    > ・4の表示は相対パス「.\AutoSave」
    > ・5の Mery.ini への出力は「.\AutoSave」
    > ・6の自動保存先は、1で作成した Mery 配置フォルダ内の「AutoSave」フォルダ

    相対パスでの指定につきましては上記のとおりの仕様に修正しておこうと思います。

    > 自動保存機能でファイル保存がされると、対象ファイルの保存場所と同じ階層に「AutoSave」フォルダが作成され、その中に自動保存されたファイルが置かれる

    実は↑これが隠し要素となっており、パスに "\" を含めず「AutoSave」のように文字のみを指定した場合、対象ファイルと同じ場所に「AutoSave」というフォルダーを作成してそこに自動保存されるようにしています。

    …が、パスに Mery.exe が配置されているフォルダーを指定した場合に Mery.ini に書き込まれる相対パスから "\" が消えてしまい、隠し要素が発動してしまってますね ^^;

    次のバージョンでは修正しておこうと思います。

     |  Kuro  |  返信
  8. > "今日のタスク.txt" のように Mery を終了する前 (ワークスペースが保存されるとき) に上書き保存した場合は、元に戻す情報はその時点で一度、破棄されるので大丈夫です。

    なるほど。やはり基本として上書き保存をする使い方をしていけば問題にはならない、ということですね。

    自動保存設定の件も、ご確認ありがとうございました🙇‍♂️
    修正など、マイペースにご対応いただければ幸いです。

     |  yuko  |  返信
  9. 自動保存設定について v3.2.7 にて修正されたことを確認しました。いつもありがとうございます🙇‍♂️

     |  yuko  |  返信
スポンサーリンク