emacs-lisp-mode でも org-mode の恩恵を受ける
outline-minor-mode vs orgstruct
emacs-lisp-mode-hook で outline-minor-mode を設定しておくと幸せになれますよね.
Orgstruct mode というのもあるのですが,どうも挙動がおかしいことがあるので,あまり信用していません
(個人の感想です).
org-mode は outline-mode から派生しているので,
org-mode の操作が有効な場合があります.
例えば, org-cycle が使えるので,結構便利です. TAB に割当てちゃいましょう.
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(outline-minor-mode 1)
;; (turn-on-orgstruct++)
(define-key outline-minor-mode-map "\C-i" 'org-cycle)
(define-key outline-minor-mode-map "\C-c\C-f" 'outline-forward-same-level)
(define-key outline-minor-mode-map "\C-c\C-b" 'outline-backward-same-level)
(define-key outline-minor-mode-map "\C-c\C-n" 'outline-next-visible-heading)
(define-key outline-minor-mode-map "\C-c\C-p" 'outline-previous-visible-heading)
))
org-cycle-emulate-tab を t にしておきましょう(デフォルトは t).
ヘッディング以外では,本来の TAB として振舞うので,快適です.
ちなみに, emacs-lisp-mode 専用のヘッディングは, lisp-mode.el で設定されています.
(setq outline-regexp ";;;\\(;* [^ \t\n]\\|###autoload\\)\\|("))
行頭から3個以上の ; や 行頭の ( がヘッディングとして認識されるようです.
コメントの付け方がきちんとしていれば,このままで有用なはずです.
同じく lis-mode.el で定義されている lisp-outline-level は,
ちょっといいかげんですね.
(defun lisp-outline-level () "Lisp mode `outline-level' function." (let ((len (- (match-end 0) (match-beginning 0)))) (if (looking-at "(\\|;;;###autoload") 1000 len)))
これをいじると,もうちょっと org-mode と仲良くなれるかもしれません.