|
jsmode の「非同期」で使えるメソッドとして
「選択範囲の『座標』」を取得できるものを追加して頂けませんでしょうか?
選択範囲のテキストを取得するメソッド(getSelectedText)は見つけたのですが
範囲の4つ(+α)の値を取るために postExecMacroMemory("") を使っていたところ
4つの値だけで 1.6ms (1値あたり 0.4ms @ 4.2 GHz PC) かかっていたのがわかり、
たまにキーボード操作のコマンドが漏れたり、マウスで操作した際に、
マクロ止める? メッセージ(抑止してない状態) やカーソル移動のモタつき
が気になる程度の操作感となってしまいました
以下の4値を常にセットで使うので1つのメソッドになるかと思います
が、今の秀丸エディタは複数個所の同時選択ができるので、その時は
その数だけ返り値が4つずつ伸びるようにするのが、
LSPのマルチカーソル想定と相性がよいかもしれません
[seltoplineno, seltop_wcs, selendlineno, selend_wcs, ...multi] = hidemaru.ge
tSelectedRange("wcs");
それと、LSPにはRange指定コマンドがいくつかあり、描画範囲(画面の上端と下端の行)
の取得ができれば、色付け範囲を指定したコスト削減などにも使えるのですが
ワープロ的な screentopy と windowheight (これは計算時に最大でも、の値として
は使える)
ではLSP相手のRange指定にキッチリとは使えないので、
results.screentopy = hidemaruGlobal.screentopy();
results.ytolineno0 = hidemaruGlobal.ytolineno(0, results.screentopy);
results.yendlineno = results.ytolineno0 + hidemaruGlobal.windowheight();
と3つの hidemaruGlobal コマンドを実行して 0.4ms * 3 = 1.2ms くらいかかります
こちらも [toplineno, endlineno] = hidemaru.getScreenRange();
のような非同期メソッドがあると副作用回避しながらコストも削減できます
// left と right の値は使い処があるかどうか不明ですがセット的に4つになる?
これらはオンデマンドで取得したり、値をキャッシュするロジックにすれば支障は減
らせるので
特に急ぎではないので、ご検討だけでもよろしくお願いします
参考の計測 (CPU 4.2 GHz)
// 非同期メソッド1つでカーソル座標2値取得 0.2ms くらい
[lineno, column_wcs] = hidemaru.getCursorPos('wcs');
// 同期メソッド2つでそれぞれ取得 0.8ms くらい (0.4ms * 2)
results.lineno = hidemaruGlobal.lineno();
results.column_wcs = hidemaruGlobal.column_wcs();
// 0.4 * 150 => 55ms くらい (外部メソッドをコールする invoke 処理共通の事情
だと思います)
hidemaruGlobal. で取れる内部的な値を表現するキーワード150種を列挙して取得
// それ以外の postExecMacroMemory な処理
hidemaruGlobal を使わない普通のロジックを組む分には、
パフォーマンスカウンタの最低分解能の 0.1ms を超えずに処理できました
|
|