imenu で ert-deftest に飛びたい

飛んで飛んで飛んで飛んで笑って笑って笑ってわらーう〜う〜。


ert-deftest で定義されたテストの関数? に imenu でジャンプしたいのですが!
ポイントは以下。

(push '(nil "^(ert-deftest \\([^()]+\\) ()$" 1)
        imenu-generic-expression)

push しているリストの中身はというと,まあ info に書いてあるんですけど,
最初の nil は imenu したときに表示されるカテゴリみたいなもん。
nil にしておけば,トップに表示される。
次は正規表現。索引付けしてほしい箇所にマッチする正規表現
その次の 1 というのは,正規表現中のグループの番号。
この部分が imenu したときに表示されると。
テストと通常の関数がたくさんある場合は,
最初の nil を "Tests" とかにしてもいいかもですね。
もちろん正規表現は自分のスタイルに合わせないと意味ナスです。
私は

(ert-deftest test-this-is-just-an-example ()
  ;; ...
)

というスタイルで書いているので上記のような正規表現にしています。

で,これを emacs-lisp-mode-hook に追加しておけばよしと。
私の場合は,以下のようにしています。

(defun my-emacs-lisp-mode-hook-func ()
  (interactive)
  (local-set-key "\M-I" 'imenu)
  (make-local-variable 'indent-tabs-mode)
  (setq show-trailing-whitespace t)
  (setq indent-tabs-mode nil)
  (set (make-local-variable 'dabbrev-check-all-buffers) nil)
  (set (make-local-variable 'dabbrev-select-buffers-function)
       'my-dabbrev-select-elisp-mode-buffers)
  (when (and (require 'auto-complete nil t) (require 'auto-complete-config nil t))
    (make-local-variable 'ac-sources)
    (setq ac-auto-start 2)
    (setq ac-sources '(ac-source-words-in-same-mode-buffers
                       ac-source-imenu
                       ac-source-functions
                       ac-source-symbols
                       ;ac-source-dabbrev
                       ;ac-source-abbrev
                       )))
  (auto-revert-mode 1)
  (push '(nil "^(ert-deftest \\([^()]+\\) ()$" 1)
        imenu-generic-expression))

(add-hook 'emacs-lisp-mode-hook 'my-emacs-lisp-mode-hook-func)

テスト関数みたいなんが増えてきて大変だったので,
調べて解決してみました。