2010-03-19 7 views
12

Ci sono molti modi per piegare il codice in Emacs e mi sono abituato a usare la modalità di contorno minore ... funziona benissimo!Modalità di piegatura persistente di Emacs

Tuttavia, desidero veramente che il mio pieghevole venga mantenuto quando chiudo e riapre i file. È piuttosto frustrante avere il folding impostato in un file nel modo in cui mi piace, solo per averlo perso quando riavvio Emacs.

Qualcuno ha trovato un modo per mantenere persistente lo stato di piegatura di un file?

+1

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

risposta

4

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

Grazie per il feedback Trey. Per essere chiari, sono in grado di abilitare la modalità secondaria del profilo per qualsiasi tipo di file che mi piace con un gancio. Quello che sto cercando è di piegare una voce di codice, chiudere il buffer e poi più tardi quando riaprilo il file, voglio che quella voce sia ancora piegata. –

+1

@Chris Capisco ora ... non so che questo è possibile. –

+0

Dove dovrebbe essere conservata questa persistenza? Nel file stesso? Cattiva idea; qualche altro file? possibile, suppongo, ma non ci sono ancora tali ganci per farlo. E rimango sospettoso di lasciar cadere quei file dappertutto. Se raccolti in una cartella ... sheesh, sarebbe enorme. –

0

Mi rendo conto che questo è un vecchio post, ma FWIW ho creato un modo minore che completa hs-minor-mode, contorno -modifica ecc. "Desidero anche che il mio pieghevole venga mantenuto quando chiudo e riapre i file". :)

Il pacchetto è in MELPA fino ad oggi e chiamato overlay persistenti.

E 'disponibile anche direttamente su GitHub: https://github.com/mneilly/Emacs-Persistent-Overlays

Problemi correlati