Imenu for Info

Infoを見ていて欲しくなったので、Info用にimenuをでっちあげてみました。
imenuとは、ミニバッファから選んだ語句(バッファから抜き出したメニューとなる語句)の場所に飛ぶ事ができる関数です。このエントリを書くために調べたところ、(少くとも)Emacs21以上で標準でEmacsに入っているようです。
C言語で書かれた適当なソース上でM-x imenuとしてみると分かり易いです。ミニバッファから、ソース上にある関数名が選択でき、選択した関数の定義がある場所に飛べると思います。
たいした事は全然やってないですが、まあ、このInfo版です。



Infoは、目次(?)が「* 語句 ...」のようになっているので、この行を抜き出すようにしました。
というか、それしかしてませんw

;; infoの設定
(defvar info-imenu-generic-expression
  '((nil "^\\* \\(\\(\\w* ?\\)*\\):" 1)))
(add-hook
 'Info-mode-hook
 '(lambda()
    (setq imenu-generic-expression
          info-imenu-generic-expression)
    (setq imenu-auto-rescan t)))

;; imenuの設定
(setq imenu-auto-rescan-maxout 300000)  ; imenu rescan

Infoはページ移動しても特にバッファが変わるわけではないので、毎回imenuを起動するたびにバッファをスキャンしないと、古いインデックスが保持されたままとなり、まともに使えません。
また、EmacsElispのinfo等、巨大なものは、imenu-auto-rescan-maxoutを大きく設定しておかないと、毎回スキャンしてくれません。


移動先候補を抜き出す正規表現は、適当にでっちあげただけなので、もしかしたら、特定のInfoで使えない等、大きな不具合があるやもしれません。
少くとも分かっている不具合は、ちょっと候補を抜き出しすぎで、ゴミとなる候補まで取ってしまっている、という事です。
ただ、使う上で、たいした問題ではないので放置しています。


そんなこんなで。

更新時刻

  • 2009/07/22 22:00