2016年8月1日

祝鳥の補完マクロが遅い気がして,カラーマーカーのせいではないかとにらみ中.ちと調べてみた.こんなコード

##num = 1000;

insert "a";
colormarker -1,0x80FF80,-1,0,1,"COLOR",lineno,column-1,lineno,column;
##i = 0;
##tick = tickcount;
while(##i < ##num){
 insert "b";
 undo;
 ##i = ##i + 1;
}
##endtick = tickcount;
$$str = "カラーマーカーつき:" + str(##endtick - ##tick) + "\n";

deletecolormarkerall "COLOR";
##i = 0;
##tick = tickcount;
while(##i < ##num){
 insert "a";
 undo;
 ##i = ##i + 1;
}
##endtick = tickcount;
undo;
$$str = $$str + "カラーマーカーなし:" + str(##endtick - ##tick) + "\n";
insert $$str;
を走らせてみると,カラーマーカーありが2215,無しが1684.より実際の状況に近いと思われる
##num = 1000;

insert "XaXbb";
moveto x - 3,y;
colormarker -1,0x8080FF,-1,0,1,"COLOR2",lineno,column-2,lineno,column + 1;
colormarker -1,0x80FF80,-1,0,1,"COLOR",lineno,column-1,lineno,column;
colormarker -1,0xFF8080,-1,0,1,"COLOR3",lineno,column + 1,lineno,column + 3;
##i = 0;
##tick = tickcount;
while(##i < ##num){
 insert "b";
 undo;
 ##i = ##i + 1;
}
##endtick = tickcount;
$$str = "カラーマーカーつき:" + str(##endtick - ##tick) + "\n";

deletecolormarkerall "COLOR";
deletecolormarkerall "COLOR2";
deletecolormarkerall "COLOR3";
##i = 0;
##tick = tickcount;
while(##i < ##num){
 insert "a";
 undo;
 ##i = ##i + 1;
}
##endtick = tickcount;
undo;
$$str = $$str + "カラーマーカーなし:" + str(##endtick - ##tick) + "\n";
insert $$str;
だとカラーマーカーありが4805,なしが2808.だいたい倍くらいかかる感じのようだ.

今の補完マクロは,引数ごとにカラーマーカーを引き,更に補完対象全体にもカラーマーカーを引いている.カラーマーカーは前に挿入するとそのまま後ろもずれてくれるので,カーソル位置の保存には便利なんだが.キー入力の取りこぼしが発生したりして結構ストレス.仕方ないのでカラーマーカーを極力使わないようにしてみようかな.複数箇所同時編集だけそのまま残すことにして,よくある単独箇所の編集は従来の方法に戻そう.問題は引数に貼っているカラーマーカー.例えば\usepackageの補完の場合,パッケージ名の補完→オプション補完と移る.今は最初の段階でオプションのある場所と引数のある場所を認識し,そこにカラーマーカーを塗って後々この情報を使うことにしているのだが.他の手は

  • 変数に保存し,再計算を自力で行う.
  • 補完対象となる引数が変わるたびにオプションや引数のある場所の解析を行う
といったところだろうか…….

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です