2013-02-07 11 views
8

Recentemente ho appreso le basi dell'org-mode di emacs e non potevo fare a meno di immaginare di applicare il concetto di compressione/espansione a parti di un file sorgente. Vorrei essere in grado di dividere il mio file .emacs nelle sotto-parti e solo le intestazioni di visualizzazione sul carico, un po 'come i seguenti:Comprimi/espandi parti del file .emacs con org-mode

; ERC config... 

; DIRED config... 

; MISC config... 

Ognuno di questi sarebbe naturalmente intestazioni a molte linee di codici una volta espanso, come this:

; ERC config 
(defun start-irc() 
    (interactive) 
    (erc-tls :server "irc.freenode.net" :port 6697 :nick "foo")) 

; DIRED config... 

; MISC config... 

Quindi è possibile? Come potrei realizzare qualcosa di simile con emacs 24.2?

Grazie!

risposta

8

Bello come il org-mode, richiede una struttura, che non credo possa essere gestita come si desidera nel file .emacs.

Che cosa fa funziona bene è folding-mode. Verificate le informazioni per esso sul wiki page, ma in fondo quello che fate è impostare commenti intorno ai pezzi di codice che si desidera mettere in una piega, in questo modo:

;;{{{ some folder of some kind 

(a few lines) 
(of lisp) 
(this "code" is just filler) 

;;}}} 


;;{{{ a different folder 

(some more elisp code) 

;;}}} 

E quando si è piegato, lo farà assomigliano:

;;{{{ some folder of some kind... 

;;{{{ a different folder... 
+0

Ha funzionato esattamente come volevo. Sono stato un po 'complicato con la parte di importazione ma l'ho capito. – ldionmarcil

7

Babel consente di ottenere esattamente questo (cioè la gestione del file di init in org-mode). Specificamente, vedi: http://orgmode.org/worg/org-contrib/babel/intro.html#emacs-initialization

Io stesso uso l'outline-minor-mode nel mio file di init per scopi vagamente simili. Varie cose sono trattate come intestazioni di schema, ma è possibile impostare outline-regexp come variabile locale del file per limitare tale comportamento, e quindi attivare e chiudere le cose con outline-toggle-children (che si assocerebbe a una chiave comoda). Il comando di attivazione funziona da qualsiasi punto della sezione, non solo sull'intestazione.

comincio le rubriche che vogliono essere compresso per impostazione predefinita con ;;;; * e terminare il mio file init con:

;;; Local Variables: 
;;; outline-regexp: ";;;; " 
;;; eval:(progn (outline-minor-mode 1) (while (re-search-forward "^;;;; \\* " nil t) (outline-toggle-children))) 
;;; End: 

Nel vostro caso si può usare:

;;; Local Variables: 
;;; outline-regexp: "; " 
;;; eval:(progn (outline-minor-mode 1) (hide-body)) 
;;; End: 

Abbastanza simile in effetti a Il suggerimento di Trey, anche se mi aspetto che con la piegatura si possano annidare banalmente sezioni alle quali non sto tenendo conto (non avendo bisogno di farlo). Sento che l'approccio di contorno lascia il file leggermente più pulito, se questo è importante per te.

4

Puoi anche dare un'occhiata al nuovo pacchetto Outshine che funziona insieme a outline-minor-mode per farlo sembrare più come org-mode. Nei file (e) lisp superano le sequenze di punti e virgola come intestazioni quindi tutto il codice esistente che segue le convenzioni standard per i commenti diventa pieghevole senza alcuna modifica. Funzionano anche molti binding di tasti in modalità org (come TAB per piegare/aprire intestazione, ecc.).

Problemi correlati