読者です 読者をやめる 読者になる 読者になる

emacs-anzu 0.07をリリースしました

emacs anzu

高速化ではないんですが, モッサリ感をなくすための改良を行いました.

最低入力文字

すごく大きなファイルで anzu-modeを有効にすると, 1文字, 2文字を入力した
段階では数万の文字列にマッチしてしまいます. anzu-modeがもっさりする
原因はバッファ内のマッチする文字列を数え上げる部分で, マッチするものが
多いとそれだけもっさりします. migemoを有効にするとそれはより顕著に
なります(migemoを有効にしなければ数万ぐらいは平気な感じですが).


なので数え上げを行う最低入力文字をカスタマイズできるようにしました.
デフォルトの値は 1です. 1より大きくしたい場合は, 以下のように設定
してください

(setq anzu-minimum-input-length 3)


これで数え上げを行うのが 3文字からになります.

数え上げる上限数

数十万でも高速に数え上げるにはどうしたものか, と考えているときに
別にそこまで数える必要はなくて, マッチするものがたくさんあるという
ことだけがわかればいいんじゃないかなと思いついて実装しました.
デフォルトは全部数え上げますが, この値に数値が設定されているときは
その数までしか数え上げを行わないようになります.


値を設定する場合は以下のように行います(デフォルトは nilで全部数え上げます)

(setq anzu-search-threshold 1000)
イメージ


このように指定した上限数以上マッチするものがある場合は, totalの末尾に "+"が
つきます(デフォルトの mode-line更新の場合). 当然ですが, 上限以上の位置情報は
保持していないので, 上限以上のマッチ位置にカーソルがある場合, その位置を適切に
表示することはできません(表示は totalと同じように 1000+のような表記になる)


人によると思いますが, 「10000個マッチするものがあって, 現在その 3845番目に
カーソルがある」ということを知るよりかは, 「現在の検索ワードではマッチするものが
多すぎて適切ではない」ということを知れた方がいいのではないかと私は思いました.
そのような考えの方はこの設定を有効にするとよいと思います


おわりに

少ない入力文字の段階では表示は不要という場合は前者を, 正確な情報でなく,
現在の検索ワードが適切かどうか知れれば良いという方は後者の変数の設定を
行えばよいかなと思います.


問題があれば githubの issuesまでお願いします.