jsmodeにスコープ破棄時のコールバック関No.11583
こみやんま さん 24/03/10 16:07
 
これについては以前の議論でもあげていたんですが、
hidemaru.addEventHandler("****", func ) 的なものを用意して、
駆動タイミングで呼ばれる方が、とっ散らかりを防止できて良いのではないかという
案。


jsmode {
    hidemaru.addEventHandler("destoryjsmode", destroyfunc);


    function destroyfunc(reason) {
        リソース破棄を必要とする処理;
    }
}

これが必要な理由は、まぁ ECMAScriptが2024年においてもなお、
スコープ直下変数に対してデストラクタを実現出来ないという言語的弱点が原因です
かねぇ。

もしJSにデストラクタがあるなら、

/// 機能しない記述
var dummy = class ABC {
   destructor() {
      ....
   }
}();

とかで終わりなんですが...

[ ]
RE:11583 jsmodeにスコープ破棄時のコールNo.11586
秀丸担当 さん 24/03/12 10:27
 
addEventHandler的なことは、あったらいいです。
それができるといろいろできると思います。
ただスコープがJavaScriptとするのは大変そうなのと、各種自動起動マクロ相当も考
えるとJavaScriptの外側のほうがいいかもしれません。
デストラクタ的なことであれば、先のkeepdllの拡張のほうがやりやすそうです。
(やるとすれば)

ちなみに参考までの情報として、似たようなものでキー操作の場合はkeyhookとregis
tercallbackというものがあります。

[ ]
RE:11586 jsmodeにスコープ破棄時のコールNo.11588
こみやんま さん 24/03/12 14:30
 
マクロ or JS 両様で、かつ、現在の自動起動マクロに沿う形なら、

//--------------------------------------------------
 永続ではなく一時的な自動起動マクロ
(現在の永続型自動起動マクロファイル実行の後に、ここで登録されているものを実
行する。
記憶が有効なのは全ての秀丸プロセスを閉じるまで)

event_idは自動起動マクロの種類に対応

registtempautomacro( event_id, filepath );
//--------------------------------------------------

みたいなのですかねぇ。うーん。


// ------ a.mac --------------------------


if (event==7) {
    // うねうね
    // マクロ、もしくは、jsを使って破棄か
    // 多分ファイルが同じならjsmode空間は保持されてるため、やりやすい。
    // マクロでの処理、setstaticvariable あたりでハンドル的な何かを橋渡しか
    js {
        // うねうね
        if (mustReleaseObjHandle) {
            なんとかかんとかRelease(mustReleaseObjHandle);
        }
    }
    endmacro;
}

// 7がファイル閉じる終了前とした場合、currentmacrofilename にするか、別ファ
イルにするかは使用者の好み次第か。
registtempautomacro( 7, currentmacrofilename );

js {
   // うねうね。
   // あとで何か処理する必要があるようなものは var として残しておく。
   var mustReleaseObjHandle; // 解放必要ハンドル
}


// -----------------------------------------------------

本来は「該当マクロ内で閉じている駆動処理」のはずが、
なぜか、手動で「自動起動マクロ」に一部の処理だけ別途登録する必要あり...
という現状よりは、
結構マシな感じにはなるかと思います。


似たような話以前も出てましたかねぇ?

[ ]