2009-08-01 18 views
116

He decidido echar un vistazo a Emacs, y me gustó mucho. Ahora, estoy usando el Emacs Starter Kit, que proporciona mejores valores predeterminados y algunas personalizaciones agradables para la instalación predeterminada de Emacs.¿Cómo compilo byte todo en mi directorio .emacs.d?

Lo he personalizado un poco, he añadido algunas cosas como yasnippet, color-themes, unbound, y otras cosas. Configuré un github repository donde guardo todas las personalizaciones para poder acceder a ellas desde varios lugares o en caso de que algo vaya mal y pierdo mi directorio .emacs.d.

Todo esto es muy agradable, pero hay un problema: Emacs tarda aproximadamente 1-2 segundos en cargarse. AFAIK Puedo compilar archivos .el individuales con M-x byte-compile-file en .elc, y funciona. Pero hay muchos archivos .el, y me pregunto si hay una forma de compilarlos todos con un simple comando o algo así, para acelerar la carga de Emacs. My Emacs no siempre está abierto, y lo abro y cierro con bastante frecuencia, especialmente después de haberlo configurado como editor predeterminado para el comando de edición en Total Commander para acostumbrarme a él más rápido (sí, Windows XP aquí).

Mi versión de Emacs es 22.3. Y sí, la instalación predeterminada de Emacs sin personalizaciones se activa al instante.

No estoy seguro de lo que se prefiere la versión al cargar, la .el o compilado .elc uno por cierto Oo

Entonces, ¿hay un comando elisp o el interruptor de línea de comandos de Emacs para hacer Emacs byte-compilar todo en el directorio .emacs.d?

Respuesta

182

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

compilará todos los archivos .el en el directorio y en todos los subdirectorios de abajo.

La parte C-u 0 es para que no pregunte por cada archivo .el que no tiene una contraparte .elc.

+8

Y a partir de entonces (una vez cada uno ha sido compilado una vez), sólo tiene que utilizar el mismo comando sin el 'Cu 0' (también conocido como' C-0', BTW). Esto compilará byte solo aquellos archivos fuente que son más recientes que sus versiones compiladas en bytes. – Drew

+1

Una pequeña nota: para mí eso no funcionó hasta que eliminé todos los archivos «.elc» de acuerdo. Acaba de decir algo como «Hecho, 0 archivos enviados, archivos α omitidos». –

+1

@ Hi-Angel Tengo el mismo problema. ¿Has encontrado alguna solución? – zhanxw

15

Esto se balancea un poco de la pregunta, pero para resolver el problema de la carga lenta puede utilizar la nueva característica demonio en Emacs 23.

"Si usted tiene una gran cantidad de paquetes de soporte, emacs el inicio puede ser un poco lento. Sin embargo, emacs 23 trae emacs --daemon, que le permite iniciar emacs en segundo plano (por ejemplo cuando inicia sesión). Puede instantáneamente abrir ventanas de emacs nuevas (marcos) con emacsclient. Por supuesto, podría tener un 'servidor' de emacs en versiones anteriores, pero ser capaz de iniciarlo en el fondo hace que este una solución mucho más agradable"

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

+0

Definitivamente revisaré este. ¡Gracias! – Mikka

+2

Si agrega alias emacs = 'emacsclient -nw -a "" -c' a su .bashrc (o la versión de su shell), primero tratará de conectarse a un daemon en ejecución si hay uno, de lo contrario, se iniciará uno y conectarte – Frederick

41

Para automáticamente Byte compilar todo lo que necesita bytes compilar cada vez que se inicia emacs, me ponga la siguiente después de que mis cambios a load-path en la parte superior de mi .emacs archivo:

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

Sorprendentemente, no añade mucho a mi tiempo de arranque (a menos somethi ng necesita ser compilado).

Para acelerar mis emacs, primero identifiqué las partes lentas usando profile-dotemacs.el y luego las reemplacé por autoloads.

20

Puede usar el indicador --batch para volver a compilar desde la línea de comandos.

recompilar todo,

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

o recompilar un solo archivo como de un Makefile,

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

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

+0

¿Podría usted cómo usarlo? – nacho4d

+4

@ nacho4d 'emacs -Q --batch -f batch-byte-compile * .el foo/*. El' - no se repite como ** byte-recompile-directory ** does though. –

Cuestiones relacionadas