第二个例子显然更复杂,我不打算解决它,但大纲模式/次要模式将很好地适用于基于缩进的树,所以这里有一个方法,大纲标题基于任意重复的前缀字符串(在本例中为四个空格,但可根据需要进行配置)。
如果加载/评估下面的代码,然后加载数据文件(包括局部变量),那么你可以隐藏/显示分行与SHIFT + TAB和升级/降级分支机构,SHIFT +左键(光标键)和SHIFT + RIGHT。当然,所有其他outline-minor-mode
功能也可用。
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
;;; Local Variables:
;;; my-outline-prefix: " "
;;; eval: (my-outline-minor-mode 1)
;;; End:
(global-set-key (kbd "<S-tab>") 'outline-toggle-children)
(global-set-key (kbd "<S-left>") 'outline-promote)
(global-set-key (kbd "<S-right>") 'outline-demote)
(defvar my-outline-prefix " "
"Prefix string denoting a single outline level for `my-outline-minor-mode'.")
(defvar my-outline-max-level 20
"Maximum number of levels for `my-outline-minor-mode'.")
(define-minor-mode my-outline-minor-mode
"Outline levels based on repetitions of `my-outline-prefix'."
0 nil nil
(outline-minor-mode 1)
(setq-local outline-level 'my-outline-level)
(setq-local outline-regexp (format "\\(%s\\)*"
(regexp-quote my-outline-prefix)))
(setq outline-heading-alist '())
(let ((level 0)
(level-prefix ""))
(while (< level my-outline-max-level)
(setq outline-heading-alist (cons (cons level-prefix level)
outline-heading-alist)
level (1+ level)
level-prefix (concat level-prefix my-outline-prefix)))
(setq outline-heading-alist (nreverse outline-heading-alist))))
(defun my-outline-level()
"Counts how many times `my-outline-prefix' appears at the start of the line."
(let* ((data (match-data))
(start (car data))
(end (cadr data))
(indent (- end start)))
(/ indent (length my-outline-prefix))))
能否请您阐述“随着本地变量包括”?......任何其他文字或暗示的第二个例子? – 2013-05-11 14:44:15
使用数据文件中包含的局部变量列表,如我在答案中所示。请参阅'C-h i(emacs)文件变量RET'。但是,由于我已将缩进值默认为四个空格,因此您也可以加载数据文件并在此实例中输入“M-x my-outline-minor-mode”。 – phils 2013-05-11 23:19:01
*可能*大纲模式仍然可以在第二个例子中工作,但我怀疑只用于展开和折叠现有的结构。其他人可能有更好的主意。 – phils 2013-05-11 23:27:53