[リストへもどる]
一括表示

タイトルPPx.StayModeについての要望
記事No4619
投稿日: 2024/08/26(Mon) 21:36
投稿者tm
PPx.StayModeの一行編集上での使い方を模索中です。

スクリプト内でインスタンス番号を指定する方法は、
一行編集のセッションごとにインスタンスが増えます。
一方、外からインスタンス番号を指定する方法は、番号を
変えない限り、同一のインスタンスが呼び出されます。

一行編集上で使う場合は、外から指定する方法がよさそうですが、
こちらは初回実行と二回め以降でコマンドを分ける必要があります。
登録 *script :10000,outsideSpec.js
呼び出し *script :10000(または *script outsideSpec.js)
初回実行のタイミングがあいまいな場合に実用が難しいので、
外からのインスタンス番号指定でも、同じコマンドで
登録と呼び出し(ppx_resume)をできる記述方法がほしいです。

それと、エラーダイアログがでて作業を中断されることがあるので
インスタンスの存在確認用の手段があればよいなと思います。

StayModeは調整中ということで、対処済みかもしれませんが
よろしくお願いします。


タイトルRe: PPx.StayModeについての要望
記事No4620
投稿日: 2024/08/29(Thu) 22:13
投稿者TORO
常駐・呼び出しは、メソッド名・関数名指定をしていない場合、
コマンドラインの記載を変えなくても使えるようになっています。

*script :10000,outsideSpec.js を繰り返し実行したり、
*script outsideSpec.js を繰り返し実行すれば、
1度目はスクリプト全体の実行、2度目以降は
function ppx_resume の実行になります。


詳細はPPx.StayMode の常駐したインスタンスを呼び出すときの説明
(ppxscr.txt 570行目以降の1),3))や、sample_resume.js を
参照してください。


インスタンスの存在確認は、現在ですと、*js :10000,"if(PPx.StayMode > 0){PPx.Echo('常駐');}"
のようにすれば確認できます。

もし、この説明でうまく機能しなかったら、どんな状況で
実行しているかを教えてください。


タイトルRe^2: PPx.StayModeについての要望
記事No4621
投稿日: 2024/08/29(Thu) 23:15
投稿者tm
実行環境はwindows10 64bit PPxDW64 198+2 JScript chakra.dll使用
モジュールバージョンppxscr21p5です。

モジュール同梱のsample_resume.jsにPPc上で以下を実行しました。
1回め *script :10000,sample_resume.js,1,2
2回め *script :10000,sample_resume.js,1,2

実行結果
1回め グローバルスコープが実行される
* sample_resume.js (JScript 11.0.16384)
start global
function ppx_resume(1, 2): StayMode = 10000 Count = 0 exvalue =
end global instance = 10000

2回め グローバルスコープが実行され、20行目でエラー
* sample_resume.js (JScript 11.0.16384)
start global
[error] Subscript out of range(code: 0)

ppx_resumeを実行するには、*script :10000,,1,2と記述する必要がありました。

> インスタンスの存在確認は、現在ですと、*js :10000,"if(PPx.StayMode > 0){PPx.Echo('常駐');}"
> のようにすれば確認できます。

こちらは最初に"*js :10000,"で常駐しているので
常に"常駐"の文字が返されている気がします。

というか、"*js :インスタンス番号,"で普通にスコープ内に干渉できるのですね。
ヘルプは何度か読み直しましたが、sampleファイルはざっと
流し見た程度だったので気付きませんでした。
これを使ってできることがありそうなので試してみます。


タイトルRe^3: PPx.StayModeについての要望
記事No4622
投稿日: 2024/08/30(Fri) 20:30
投稿者tm
インスタンスの常駐確認はこんな感じでいけました。
常駐するときは何らかの変数を保持しているでしょうから問題なさそうです。
*msgbox %*js(:10000,"if(typeof hasInstance==='undefined'){PPx.StayMode=0;PPx.result=0;}else{PPx.result=-1;}")
さらに短縮
*msgbox %*js(:10000,"if(PPx.result=(typeof hasInstance!=='undefined')){}else{PPx.StayMode=0;}")

LOADEVENTで常駐を解除するときはこのようになりました。
これでインスタンスがない場合のエラーを回避できそうです。
*linecust label%n,KC_main:LOADEVENT,*js :10000,"if('%n'==='%%n'){PPx.StayMode=0;}else{PPx.Quit(-1);}"%%:*linecust label%n,KC_main:LOADEVENT,

追記
別IDで実行されたときにインスタンスが残るのでこれではだめそうです。
あとは、上の%*js()で得た返り値をPPc側の*if()で分岐すれば
できないことはないですが、それを*linecust一行に収めるのは
冗長で避けたいところです。


タイトルRe^3: PPx.StayModeについての要望
記事No4624
投稿日: 2024/08/31(Sat) 21:49
投稿者TORO
確かに *script :10000,outsideSpec.js の記載はできませんでした。
*script outsideSpec.js の記載でお願いします。


また、常駐確認も間違えていました。今確認していますが、
何か機能追加で対応することになると思います。


> というか、"*js :インスタンス番号,"で普通にスコープ内に干渉できるのですね。

一回スクリプトが終わったあとに、eval を追加実行する感じです。


タイトルRe^4: PPx.StayModeについての要望
記事No4632
投稿日: 2024/09/08(Sun) 10:00
投稿者tm
StayModeの調整と機能の追加ありがとうございます。
WSHでしか確認できていませんが、:インスタンス番号,script.jsの
記述で二度目以降の実行もできるようになりました。
%*stayinfo()による常駐状態の確認も助かります。
ただ挙動が調整された影響で、一行編集上で実行した常駐
インスタンスの破棄はそのセッション内でしかできなくなりました。
R5では一行編集で実行したインスタンスはセッション外の
PPc上からアクセス可能でした。
仕様上ではR6の挙動が正しいのでしょうが、一行編集内で破棄
されなかった常駐インスタンスがセッションごとに追加されて、
PPcを終了するしか破棄する方法がないのは問題があるように思えます。


タイトルRe^5: PPx.StayModeについての要望
記事No4634
投稿日: 2024/09/08(Sun) 22:34
投稿者TORO
> ただ挙動が調整された影響で、一行編集上で実行した常駐
> インスタンスの破棄はそのセッション内でしかできなくなりました。

異なるセクションで同じインスタンス番号を使ったときに各セクションの
インスタンスとして実行できないという問題と、別セクションからインス
タンスのリソースを扱うと異常終了等の原因になるという問題があるため、
今回修正しています。

一行編集が終了したときに、イベントが発生できるようにしようかと
思っています。


タイトルRe^6: PPx.StayModeについての要望
記事No4635
投稿日: 2024/09/09(Mon) 21:02
投稿者tm
> 一行編集が終了したときに、イベントが発生できるようにしようかと
> 思っています。

了解です。
StayModeを色々と試していますが、いまのところおかしな挙動は
でていません。