ログサーバへのquit指示を出したいNo.10096
ラフ さん 23/03/14 20:29
 
ログサーバというかコマンドサーバ書こうとしていて
以前サンプル書いてもらったjs { } 内のfunction receiveData()でquitやexitした
いんですが、Not supportedエラーって出ます。
サポート出来ない理由とかあるんでしょうか?
サポート出来ないとして、回避策はありますか?
つまり秀丸を/stdio指定で起動をかけたクライアント側が終了する前にサーバ側の秀
丸も終了させたい

[ ]
RE:10096 ログサーバへのquit指示を出したNo.10097
秀丸担当 さん 23/03/15 11:50
 
通常のjs{}内では、exit();やquit();はサポートしていませんでした。
内部的な都合もあって、実行順序を制御するのが難しそうということがあったのだと
思います。

今回はおそらく標準入出力の非同期で呼ばれる関数の中のことかと思います。
非同期の関数では、quitだけでなく、秀丸マクロの文が使えないため、hidemaru.pos
tExecMacroMemoryをする必要があります。
挿入する例の場合、例えば以下のようにしていました。

js{
 //...
 function receiveData(s){
  hidemaru.postExecMacroMemory("js{insertDelay();}");
 }
 
 function insertDelay(){
  insert("xxx");
 }
 //...
}

上記の例は、postExecMacroMemoryの中で再度jsの操作をするためでしたが、秀丸マ
クロの文だけであれば、以下のように書くことができます。

js{
 //...
 function receiveData(s){
  hidemaru.postExecMacroMemory("insert \"xxx\";");
 }
 
 //...
}

quitの場合も、以下のようにして書くと回避できると思います。

js{
 //...
 function receiveData(s){
  hidemaru.postExecMacroMemory("quit;");
 }
 
 //...
}

[ ]
RE:10097 ログサーバへのquit指示を出したNo.10098
ラフ さん 23/03/15 12:41
 
>今回はおそらく標準入出力の非同期で呼ばれる関数の中のことかと思います。
insertDelayでしたね。失礼しました。自分で関数名変えてたの忘れてました(^^;


>非同期の関数では、quitだけでなく、秀丸マクロの文が使えないため、hidemaru.po
>stExecMacroMemoryをする必要があります。
>quitの場合も、以下のようにして書くと回避できると思います。
>
>js{
> //...
> function receiveData(s){
>  hidemaru.postExecMacroMemory("quit;");
> }
>  
> //...
>}
stdin.onReadLine(function(s){
 g += s; //ログとして全部拾う場合は漏れないようにする
 hidemaru.postExecMacroMemory("js{receiveData();}");
});
のとび先のreceiveDataで再度hidemaru.postExecMacroMemory使って
function receiveData(){
 ・
 ・
 ・
 hidemaru.postExecMacroMemory("quit;");
}

で上手く行きました。ありがとうございました。

[ ]