折りたたみ表示
Eclipseに慣れてしまってるので、EmacsでPHPのソースをみていくときに
折り畳みがないと不便だなと思っていたわけですが。
folding.el だとコメントに//{{{とかが入っていないソースもあるわけで、うーんと思っていました。
そしたらアウトラインモードを使えば良いとかわかりましたよ。
ちょっとカンドー。この辺を参考にしました。
http://d.hatena.ne.jp/katase_n/19700201
http://www.bookshelf.jp/soft/meadow_35.html#SEC506
http://www.bookshelf.jp/pukiwiki/pukiwiki.php?%B2%BF%A4%C7%A4%E2%A5%A2%A5%A6%A5%C8%A5%E9%A5%A4%A5%F3%A5%E2%A1%BC%A5%C9
最近はもうPHP5な人なので対応してみました。
キーバインドをC-c C-oに変更したのと、Enterで開閉をできるようにしてみた。(うまくいかないこともあるみたいだけどとりあえずね。)
(add-hook 'php-mode-hook '(lambda () ; ヘッドラインの指定 (setq outline-regexp (concat "^<\\?\\|" "^\\?>\\|" "^[abstract ]*class\\|" "^inteface\\|" "^ [abstract|public|protected|private|static]*\s?[public|protected|private|static]*\s?function\\|" "^ [abstract|public|protected|private|static]*\s?[public|protected|private|static]*\s?function\\|" "^/\\*\\*\\|" "^ /\\*\\*\\|" "^ /\\*\\*")) (setq outline-level '(lambda () (save-excursion (let ((str nil)) (looking-at outline-regexp) (setq str (buffer-substring-no-properties (match-beginning 0) (match-end 0))) (cond ((string-match "^/\\*\\*" str) 1) ((string-match "^<\\?" str) 1) ((string-match "^\\?>" str) 1) ((string-match "^[abstract ]*class" str) 1) ((string-match "^interface" str) 1) ((string-match "^ /\\*\\*" str) 2) ((string-match "^ /\\*\\*" str) 2) ((string-match "^ [abstract|public|protected|private|static]*\s?[public|protected|private|static]*\s?function" str) 3) ((string-match "^ [abstract|public|protected|private|static]*\s?[public|protected|private|static]*\s?function" str) 3) ))))) (setq outline-minor-mode-prefix "\C-c\C-o") (outline-minor-mode t) (hide-body))) (defun outlineadd-mode-hook () (define-key outline-mode-prefix-map "\C-v" 'outlineadd-occur) (define-key outline-mode-prefix-map "\C-m" 'outlineadd-toggle)) (add-hook 'outline-mode-hook 'outlineadd-mode-hook) (add-hook 'outline-minor-mode-hook 'outlineadd-mode-hook) (defun outlineadd-occur () (interactive) (occur (concat "^" outline-regexp))) (defun outlineadd-toggle () (interactive) "Toggle outline hiding for the entry under the cursor" (if (progn (setq cpos_save (point)) (end-of-line) (get-char-property (point) 'invisible)) (progn (show-subtree) (goto-char cpos_save)) (progn (hide-leaves) (goto-char cpos_save))))