手軽にimenuの候補生成設定を行なうための拡張、easy-imenu-index-generator.elを公開しました。

動機

UnrealScript、ScalaHowmなど日頃良く使用しているフォーマットのもののimenu用の設定が見つからず、
自作する際に手軽に作れるように作成しました。
現状文法上の階層構造を考慮していない作りになっています。

機能

使い方は、

  1. imenuの候補を生成する際に使用する設定用変数を作成。(以降、設定用変数をsettingとした場合)
  2. 設定を有効にしたいタイミングで (easy-imenu-index-generator-set-for-current-buffer setting) とするとそのバッファに対して設定されます。

(***-mode-hookなどへのadd-hookを利用するとmode別設定をしやすいです。)

という感じです。

scala用の設定例は、

(defvar easy-imenu-index-generator-scala
  (make-easy-imenu-index-generator-setting
   :alist
   `(
     ((caption . "[CLASS]  ")
      (regexp . "^[ \t]*\\(abstract \\)?\\(case \\)?class[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"))
     ((caption . "[OBJECT] ")
      (regexp . "^[ \t]*object[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"))
     ((caption . "[TRAIT]  ")
      (regexp . "^[ \t]*trait[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"))
     ((caption . "[FUNC]   ")
      (regexp . "^[ \t]*\\(private \\)?\\(override \\)?\\(final \\)?\\(def \\)+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"))
     ((caption . "[VAR]    ")
      (regexp . "^[ \t]*\\(private \\)?\\var[ \t]"))
     ((caption . "[VAL]    ")
      (regexp . "^[ \t]*\\(private \\)?\\val[ \t]"))
     )
   :add-line-number-to-item t
   ))

(add-hook 'scala-mode-hook
	  (lambda ()
	    (easy-imenu-index-generator-set-for-current-buffer easy-imenu-index-generator-scala)))

のような感じになります。
(こちらの設定例は、easy-imenu-index-generator-config.elにはいっています。)

導入

  • git clone git@github.com:tm8st/emacs-easy-imenu-index-generator.git

でソースの入手。
もしくは

http://github.com/tm8st/emacs-easy-imenu-index-generator/raw/master/easy-imenu-index-generator-config.el
をダウンロードして、パスを通し、

.emacs等に、

(require 'easy-imenu-index-generator-config)

(add-hook 'scala-mode-hook
	  (lambda ()
	    (easy-imenu-index-generator-set-for-current-buffer easy-imenu-index-generator-scala)))

のような感じのコードを追加してください。

設定については、お好みに合せ調整してください。

今後

  1. 階層構造を考慮した候補生成への対応?

ご要望などありましたら、Twitterでお知らせください。