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
と仲良くなれるかもしれません.