「アウトライン解析の枠」の書き換えタイNo.10208
白雲斎 さん 06/04/20 08:05
 
こんにちは、白雲斎です。

Windows XP, 秀丸エディタ 6.00β17

マクロでアウトライン要素の並べ替えをしたとします。
この時、「アウトライン解析の枠」は、1個入れ替えるたびに計算をやり直すの
でしょうか?

いや、マクロ実行時に「アウトライン解析の枠」が表示されていると、マクロが
終了するまで「計算中」と表示されているので、どうなっているのだろうと思っ
たのです。

で、マクロ本文の前後に、

#outlineList = getconfig("HilightList");
config "xHilightList:2";
    :
    :
config "xHilightList:" + str(#outlineList);

としたら、早くなるかと思ったのですが、変わらないし・・・。
これは、意味ないですかね。

実験内容:
Celeron 2GHz, Memory 512MB
行数:100,000、ノード数:4,600
処理:見出しのキーワードに基ずく並べ替え

config文あり:132秒
config文なし:131秒

[ ]
RE:10208 「アウトライン解析の枠」の書きNo.10210
秀丸担当 さん 06/04/20 12:11
 

>マクロでアウトライン要素の並べ替えをしたとします。
>この時、「アウトライン解析の枠」は、1個入れ替えるたびに計算をやり直すの
>でしょうか?

マクロが完全に処理中の場合は、アウトライン解析の計算は行われていないです。
マクロ実行後、空き時間があるときに計算必要部分のみを計算します。

while(1){
    inert "見出し\n";    //この間計算無し
}


メッセージなどが出ているとき、空き時間がある場合にはその間計算されます。

insert "見出し1\n";
message "メッセージ";    //ここで計算されている
insert "見出し2\n";


アウトライン解析が完了しているかどうかに関わらず(つまり完了していなくて
も)、次の見出し/前の見出しなどはできます。

insert "見出し\n";
prevoutlineitem;


>config "xHilightList:2";

これは、0x0002は意味が無い数値ですが、関数一覧のフラグが立っていないとい
うことで、強調一覧になっています。
ですがその後マクロが完全に処理中であれば、その間何も計算は行われないです。

>config "xHilightList:" + str(#outlineList);

xHilightListの変更があると、1から計算がやり直されることになります。
xHilightListの変更が無ければ、計算必要部分のみの効率的な計算が行われます。

ちなみにxHilightListでツリー表示を表す値がヘルプに無いので書いておかなく
てはいけないですね。

[ ]
RE:10210 「アウトライン解析の枠」の書きNo.10212
白雲斎 さん 06/04/21 06:35
 
こんにちは 秀丸担当 さん、白雲斎です。

>>マクロでアウトライン要素の並べ替えをしたとします。
>>この時、「アウトライン解析の枠」は、1個入れ替えるたびに計算をやり直すの
>>でしょうか?
>
>マクロが完全に処理中の場合は、アウトライン解析の計算は行われていないです。
>マクロ実行後、空き時間があるときに計算必要部分のみを計算します。

丁寧な解説、ありがとうございます。
理解が深まりました。

[ ]