outline不能隐藏子节点
发表于 : 2009-08-05 20:43
网上东拼西凑找资料,配置起来(主要用于python文件),折叠倒能折叠,只是如果一个heading下如果有子heading,这个heading就不能折叠,保持子heading可见,你知道,一个class下有很多函数的,有时还是需要折叠起来,看手册,有hide-leaves等函数,应该就是实现这个功能,可就是不行,还请各位多多指教
配置如下:
配置如下:
代码: 全选
;; outline
(defvar outline-start-hidden t "Start outline hidden")
(defun py-outline-level ()
"This is so that `current-column` DTRT in otherwise-hid
den text"
;; from ada-mode.el
(let (buffer-invisibility-spec)
(save-excursion
(skip-chars-forward "\t ")
(current-column))))
(defun outline-setup (regexp)
"Setup outline mode"
(defvar outline-toggle-all-flag nil "toggle all flag")
(make-variable-buffer-local 'outline-toggle-all-flag)
(defvar cpos_save nil "current cursor position")
(outline-minor-mode)
(setq outline-regexp regexp)
(setq outline-level 'py-outline-level)
(define-key outline-minor-mode-map "\C-c\C-e" 'outline-toggle-entry)
(define-key outline-minor-mode-map "\C-c\C-a" 'outline-toggle-all)
(if outline-start-hidden
(progn
(setq outline-toggle-all-flag t)
(hide-body)))
(defun outline-toggle-entry () (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))))
(defun outline-toggle-all () (interactive)
"Toggle outline hiding for the entire file"
(if outline-toggle-all-flag
(progn
(setq outline-toggle-all-flag nil)
(show-all))
(progn
(setq outline-toggle-all-flag t)
(hide-body))))
)
(defun python-environment () (interactive)
"Wrap for python stuff"
(python-mode)
(autoload 'python-mode "python-mode" "Python editing mode." t)
(if (executable-find "ipython")
(require 'ipython))
(global-set-key "\C-xpl" 'load-ropemacs)
;;(setq interpreter-mode-alist (cons '("python" . python-mode)
;; interpreter-mode-alist))
(outline-setup "[^ \t]\\|[ \t]*\\(def\\|class\\|if\\|elif\\|else\\|while\\|for\\|try\\|except\\|finally|with\\)"))
(add-to-list 'interpreter-mode-alist '("python" . python-environment))