Edit: Ora che ho capito la domanda ...
ne dite di qualcosa di simile al seguente nippet di codice. Sembra funzionare per me, anche se non ho capito come evitare ogni volta che viene richiesta la variabile locale del file.
(defvar omm-state nil
"file local variable storing outline overlays")
(defun omm-state-mode (&optional arg)
"poor man's minor mode to re-apply the outline overlays "
(interactive)
(omm-re-enable-outline-state)
(add-hook 'before-save-hook 'omm-state-save))
(defun omm-get-all-overlays()
"return a list of outline information for all the current buffer"
(save-excursion
(let ((all-overlays (overlays-in (point-min) (point-max))))
(mapcar (lambda (o)
(list (overlay-start o) (overlay-end o) (overlay-get o 'invisible)))
(reverse all-overlays)))))
(defun omm-re-enable-outline-state (&optional arg)
"turn on outline-minor-mode and re-apply the outline information"
(outline-minor-mode 1)
(when (listp omm-state)
(mapcar (lambda (p)
(apply 'outline-flag-region p))
omm-state)))
(defun omm-state-save()
"save the outline state in a file local variable
Note: this just replaces the existing value, you need to start
it off by adding something like this to your file:
# Local Variables:
# omm-state:()
# mode:omm-state
# End:
"
(ignore-errors
(save-excursion
(goto-char (point-max))
(when (search-backward "omm-state:" nil t)
(goto-char (match-end 0))
(kill-sexp)
(princ (omm-get-all-overlays) (current-buffer)))))
nil)
Questa soluzione richiede di "semina" il file con qualcosa come:
# Local Variables:
# omm-state:()
# mode:omm-state
# End:
fonte
2010-03-19 19:48:53
Non una risposta esatta, ma è possibile utilizzare org-mode con [orgfold.el] (http://www.emacswiki.org/emacs/orgfold.el) o [orgfold-separate-file.el] (http://www.emacswiki.org/emacs/orgfold-separate-file.el) - anche se sarebbe bello se quest'ultimo funzionasse con una sola memoria di stato globale file (come in [saveplace.el] (http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/saveplace.el)). – Mark