auto-highlight-symbol.elの感想

https://github.com/mitsuo-saito/auto-highlight-symbol-mode/

auto-highlight-symbol.elを使ってみた感想です。今は有効にしていないの
ですが、設定次第ではすごく便利に使えるかと思います。コードを書いても
いないのにいろいろ書いてしまうのはどうかと思うのですが、感想ということで。

キーバインド

デフォルトで結構決まっています。'C-x C-a'が取られるのはちょっとと
個人的には思いました。auto-highlight-symbol-mode-mapをあらかじめ自分で
設定するとか、デフォルトのキーバインドを削除するとか変更の方法は
いろいろあるんでしょうけど、関数だけ定義してキーバインドは自分で
割り当てるって方がいいんじゃないかなと思いました。7つほど割当たって
いるのですが、人によっては全部使わないってケースもあるだろうし。
7つ取られるのはちょっと痛いかなぁ。

ハイライトするシンボルの判定

ソースを完全に読めていないのですが、基本的にユーザがマッチのための
正規表現なり、述語(predicate)を指定しない場合は、デフォルトの正規表現
マッチングが行われます。それは以下のような定義です。

(defconst ahs-default-symbol-regexp "^[0-9A-Za-z/_.,:;*+=&%|$#@!^?-]+$"
  "Default symbol regular expression.")

ほぼあらゆる文字列にマッチしてしまいます。'='だけとかでもマッチ。
この Elispは様々なモードに対応させようというものなので、仕方ないと
いえば仕方ないし、ユーザが設定できる余地があるから、別にいいんだろう
けど、デフォルトで各モードのシンボルの正規表現なり判定ルーチンを
用意して欲しいかなぁと思いました。言語仕様的にシンボルってある程度
定まると思うので。


各モードにシンボル判定正規表現とか、判定ルーチンってのがあれば、
こういう elispを書く人は助かると思うんですけど、そういうのはないん
ですかね?詳しくはわからないですが、みんな自前で書いてしまうという
のが現状であればそれはちょっと非効率かなと思いました。

グローバルに有効にした場合

'(global-auto-highlight-symbol-mode t)'としてしまうと無効化できない。
'M-x auto-highlight-symbol-mode'とすれば、バッファごとには無効化できる
けど、グローバルな設定は残ったままです。whitespace-modeだと globalな
設定もトグルできますけど、それはできないようです。whitespace-modeの
コードを参考につつ、修正できないかなと思ってます。時間ができたら
とりかかろうと思います。


追記
私の勘違いでした。コメントの指摘の通り globalに設定してもトグルできます。
誤った情報を書いてしまい申し訳ありません。

最後に

自分で各モードのマッチについて書いてみようかと思います。それで
しっかり使えるなって思ったら、継続的に使おうかなと思います。


間違っていたことがあったら、指摘していただけると助かります。