2009-08-01 8 views
116

Ho deciso di dare un'occhiata a Emacs, e mi è piaciuto molto. Ora, sto usando il Emacs Starter Kit, che offre una migliore impostazione predefinita e alcune personalizzazioni per l'installazione predefinita di Emacs.Come faccio a compilare in byte tutto nella mia directory .emacs.d?

ho personalizzato un po ', ha aggiunto un po' di roba come yasnippet, color-themes, unbound, e altre cose. Ho impostato uno github repository in cui tengo tutte le personalizzazioni in modo che possa accedervi da più punti o nel caso in cui qualcosa vada a male e perdo la mia directory .emacs.d.

Tutto questo è molto bello, ma c'è un problema: Emacs richiede circa 1-2 secondi per caricare. AFAIK I può compilare singoli file .el con M-x byte-compile-file in .elc, e funziona. Ma ci sono molti file .el, e mi chiedo se c'è un modo per compilarli tutti con un semplice comando o qualcosa del genere, per accelerare il caricamento di Emacs. My Emacs non è sempre aperto e lo apro e chiudo abbastanza spesso, specialmente dopo che l'ho configurato come editor predefinito per il comando di modifica in Total Commander per abituarmi più velocemente (sì, windows xp qui).

La versione di My Emacs è 22,3. E sì, l'installazione predefinita di Emacs senza personalizzazioni si attiva istantaneamente.

Non sono sicuro di quale versione è preferito durante il caricamento, la .el o compilato .elc uno per il modo in cui Oo

Quindi, c'è un comando elisp o riga di comando Emacs per rendere Emacs byte-compilare tutto nella directory .emacs.d?

risposta

182

C-u 0 M-x byte-recompile-directory

saranno compilare tutti i file .el nella directory e in tutte le sottodirectory sotto.

La parte C-u 0 è quella di non chiedere informazioni su ogni file .el che non ha una controparte .elc.

+8

E da allora in poi (una volta ciascuno è stato compilato una sola volta), basta usare lo stesso comando senza il 'Cu 0' (aka' C-0', BTW). Ciò consentirà di compilare in byte solo i file di origine più recenti rispetto alle versioni compilate in byte. – Drew

+1

Una piccola nota: per me non ha funzionato fino a quando non ho rimosso tutti i file ".elc". Ha appena detto qualcosa come «Fatto, 0 file in formato ridotto, file α saltati». –

+1

@ Hi-Angel Ho lo stesso problema. Hai trovato qualche soluzione? – zhanxw

15

questo è che ondeggiano un po 'dalla domanda, ma per risolvere il problema del carico lentamente è possibile utilizzare la nuova funzionalità daemon in Emacs 23.

"Se avete un sacco di pacchetti di supporto, emacs di avvio può essere un po 'lento. Tuttavia, Emacs 23 porta emacs --daemon, che consente di avviare emacs in background (ad esempio quando si accede). È possibile istantaneamente pop-up nuovi emacs finestre (frame) con emacsclient. Ovviamente, è possibile che disponga già di un "server" emacs in versioni più vecchie, ma essere in grado di avviarlo in sottofondo rende questo una soluzione molto più bello"

Da http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html

+0

Ne controllerò sicuramente uno. Grazie! – Mikka

+2

Se aggiungi l'alias alias emacs = 'emacsclient -nw -a "" -c' al tuo .bashrc (o alla tua versione della shell) tenterà prima di connettersi a un demone in esecuzione se ce n'è uno, altrimenti inizierà uno e ti connette. – Frederick

41

Per automaticamente Byte compilare tutto ciò che deve byte compilare ogni volta che inizio emacs, ho mettere il seguente testo dopo le mie modifiche al load-path in cima alla mia .emacs lima:

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0) 

Sorprendentemente, non aggiunge molto al mio tempo di avvio (a meno che non somethi ng deve essere compilato).

Per accelerare i miei emacs, ho identificato per la prima volta le parti lente usando profile-dotemacs.el e quindi li ho sostituiti con autoloads.

20

È possibile utilizzare il flag --batch per eseguire la ricompilazione dalla riga di comando.

ricompilare tutto, fanno

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")' 

o per ricompilare un singolo file come da un Makefile,

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")' 
+5

utilizzare [batch-byte-compile] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Compilation-Functions.html#index-batch_002dbyte_002dcompile-909). – npostavs

+0

Potresti come usarlo? – nacho4d

+4

@ nacho4d 'emacs -Q --batch -f batch-byte-compile * .el foo/*. El' - non recurse come ** byte-ricompilare-directory ** fa però. –

Problemi correlati