[ 新規に投稿する ]

postExecMacroMemoryの帰属空間の確認No.10670
こみやんま さん 25/03/31 10:13 [ コメントを投稿する ]
  一応あってると思いますが、認識が違っていたら記述修正が必要なので
確認となります。

以下のスクリプトがわかりやすいかと思うのですが、

postExecMacroMemory は、
「実行した瞬間の秀丸のプロセスのjsmode空間」ではなく、
「そのpostExecMacroMemory自体が帰属する」実行空間を採用して、
引数の文字列を実行する、

という認識であっているかどうかの確認となります。
(今まで、この前提で組んでいたのですが、違ってたらヤバいので...)

言葉で伝達するのは非常に困難ですので、下のスクリプトを実行してもらうのが一番かと思います。


jsmode "WebView2\\" + currentmacrofilename + "ONE";

js {

// hidemaru.postExecMacroMemoryの実行を確かなものとする関数
function pushPostExecMacroMemory(command) {

    let isScheduled = 0;
    var retryPushPostExecMacroMemory;

    function attemptExecution() {
        console.log(hidemaru.getJsMode()); // getJsModeはあくまでも「ここの実行の帰属空間」ではなく「その瞬間、この秀丸プロセスが支配されているjsmode空間」なので、「_TWO」の方を指す
        if (!isScheduled) {
            isScheduled = hidemaru.postExecMacroMemory(command); // だがしかし、こちらは、問題なく「func_ONE」が表示される。
            // この行を実行した瞬間としては、「_TWO」の支配下だが、このスクリプトの帰属空間は「_ONE」なので、「ONE」の実行空間を採用した js { } を実行するようにしている。
        }
        if (!isScheduled) {
            retryPushPostExecMacroMemory = hidemaru.setTimeout(attemptExecution, 200);
        }
    }

    retryPushPostExecMacroMemory = hidemaru.setTimeout(attemptExecution, 200);
}

function func() {
    debuginfo(2);
    console.log("func_ONE");
}

pushPostExecMacroMemory("js { func(); }");

}



jsmode "WebView2\\" + currentmacrofilename + "_TWO";

js {
function func() {
    debuginfo(2);
    console.log("func_TWO");
}

}
[ ]
RE:10670 postExecMacroMemoryの帰属空間の確認No.10671
秀丸担当 さん 25/04/01 12:11 [ コメントを投稿する ]
  はい、postExecMacroMemoryは、postExecMacroFileとは違って、それを実行したときのjsmodeを使うようになっています。
他にも、postExecMacroFileとは違って、自動的にsetcompatiblemode 0x08000000; setbackgroundmode 1; 相当となるようになっています。
[ ]

[ 新規に投稿する ]