ミニバッファにElispの対応する括弧を表示

はじめに

Elispを書いているときに、括弧が多すぎて何に対応しているか分からなくなることがありました。
そのため、閉じ括弧の上にカーソルを置くと対応する括弧の関数名がミニバッファに表示する関数を作りました。
ruby-modeの「end」の上にカーソルを追いたときに対応するdefun部分がミニバッファに表示されていた機能を真似て作ってみました。


利用方法

Gistからコードをコピペして評価したら利用できます。
デフォルトで起動するので、止めるときには以下の関数を使います。
M-x toggle-display-couple-parenthesis-process

表示タイプには、対応する括弧の「関数表示」と「行表示」があります。
デフォルトでは、関数名の表示にしています。以下の関数で切り替えすることができます。

関数表示

関数表示 M-x switch-display-couple-parenthesis-token

行表示

行表示 M-x switch-display-couple-parenthesis-line

課題

現状では、以下のような問題があります。
根本的な実装方法を間違えていたり、もっと良い方法があると思います。

  • コメントや文字列中に"("や")"があると正しく認識できない。
  • ruby-modeの関数と違って、行番号が表示できない。
  • 行表示で)があると表示を打ち切る
  • 行表示でシンタックスハイライトがされない

emacs-lisp-mode中に")"を入力したときの挙動を理解できれば・・・

おわりに

まだ機能的に足りない部分がありながらも暫定版として公開しました。
emacs-lisp-modeでは閉じ括弧を入力したときに、対応する開き括弧が画面外にあると関数が表示される機能があります。その部分の処理を理解できれば、もっと綺麗な実装になるのではないかと考えています。
ご指摘がありましたら、よろしくお願いします。