2010-03-19 13 views
12

Hay muchas maneras de doblar el código en Emacs y me he acostumbrado a usar el modo secundario de contorno ... ¡funciona muy bien!Modo plegable persistente de Emacs

Sin embargo, realmente quiero que mi plegado persista cuando cierro y vuelvo a abrir los archivos. Es bastante frustrante tener una configuración doblada en un archivo de la manera que me gusta, solo para perderla cuando reinicie Emacs.

¿Alguien ha encontrado una forma de mantener el estado de plegado de un archivo persistente?

+1

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

Respuesta

4

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:    
+0

Gracias por los comentarios Trey. Para ser claros, puedo habilitar el modo secundario de esquema para cualquier tipo de archivo que me guste con un gancho. Lo que estoy buscando es doblar una entrada de código, cerrar el búfer y más tarde cuando vuelvo a abrir el archivo, quiero que esa entrada aún esté doblada. –

+1

@Chris Entiendo ahora ... no sé si esto es posible. –

+0

¿Dónde se almacenaría esta persistencia? En el archivo en sí? Mala idea; algún otro archivo? posible, supongo, pero aún no hay ganchos para hacer esto. Y seguiría sospechando de dejar caer esos archivos por todos lados. Si se recopila en una carpeta ... Sheesh, sería enorme. –

0

me di cuenta que es una entrada antigua, pero Fwiw creé un modo menor que complementa hs-minor-mode, contorno -mode etc. También "realmente quiero que mi plegado persista cuando cierro y vuelvo a abrir archivos". :)

El paquete está en MELPA a partir de hoy y se llama superposición persistente.

También está disponible directamente en github: https://github.com/mneilly/Emacs-Persistent-Overlays