Editar: Ahora que entiendo la pregunta ...
¿Qué tal algo como lo siguiente nippet de código. Parece que funciona para mí, aunque no he descubierto cómo evitar que se me solicite la variable local del archivo cada vez.
(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)
Esta solución requiere que "siembra" de su archivo con algo como:
# Local Variables:
# omm-state:()
# mode:omm-state
# End:
No es una respuesta exacta, pero se puede utilizar org-mode con [orgfold.el] (http://www.emacswiki.org/emacs/orgfold.el) u [orgfold-separate-file.el] (http://www.emacswiki.org/emacs/orgfold-separate-file.el) - aunque sería bueno si el último funcionara con solo un almacenamiento de estado global archivo (como en [saveplace.el] (http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/saveplace.el)). – Mark