Reemplace las declaraciones obligatorias por carga automática en el archivo .emacs para mejorar el rendimiento

8

De acuerdo con estas publicaciones:

de alguna manera, uno puede reemplazar requirey loaddeclaraciones en el .emacsarchivo para acelerar el inicio de emacs. Sin embargo, no sé cómo hacer esto en detalle.

Por ejemplo, tengo (entre otras cosas) en mi archivo .emacs lo siguiente requirey las loaddeclaraciones:

(load "auctex.el" nil t t)
(require 'alarm)
(require 'linked)
(load "nxhtml/autostart.el")
(require 'autoinsert)
(require 'recentf)
(require 'color-theme)
(load "~/.emacsaddons/emacs-color-theme-solarized/color-theme-solarized")
...

Para alarmy linkedhay archivos correspondientes en un directorio llamado .emacsaddons, porque nxhtmlhay un directorio, para los demás no hay archivos correspondientes en .emacsaddons. No he incluido todo requireo loaddeclaraciones de mi .emacsarchivo en el ejemplo anterior, sólo algunos donde me siento que los pasos para su sustitución por autoloaddiferirán entre ellos (por ejemplo, porque algunos tienen elarchivos unter .emacsaddonsy algunos no lo hace, o porque nxhtmles un subdirectorio de .emacsaddons...).

¿Cómo son los pasos detallados para reemplazar todo por autoloadfuncionalidad para mejorar el rendimiento?

estudiante
fuente

Respuestas:

4

Como primer paso hacia la carga automática, sugeriría que convierta sus loadcomandos explícitos con rutas adjuntas a la lista de cosas que los emacs deberían cargar, como en:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/"))

Con eso en la parte superior de su .emacs, puede llamar a otras cosas que dependen de cargar otros archivos para que se encuentren.

Específicamente para posponer la carga de archivos, para cada uno (require 'foo)que tenga en su .emacs, debe reemplazarlo con algo similar a:

(autoload 'name-of-foo-mode "code-for-foo.el" "Minor/Major mode for foo" t)

Es posible que tenga que experimentar (quizás leer) el código del .el archivo respectivo para ver cuál es el nombre que debe colocar 'name-of-foo-mode. Los más comunes son 'fooo 'foo-mode, pero hay inconsistencia.

En mi caso, tengo estas declaraciones cerca de la parte inferior de mi .emacs:

(autoload 'textmate-mode "textmate" "Minor mode for automatic bracket pairs" t)
(autoload 'post-mode "post" "Mode for editing e-mails" t)
(autoload 'turn-on-reftex "reftex" "Minor mode for references in TeX files" t)
(autoload 'mode-compile "mode-compile" "Compile current buffer" t)
(autoload 'markdown-mode "markdown-mode" "Major mode for Markdown files" t)

pero algunas de las declaraciones que tuve que hacer requireantes de pasar a la carga automática fueron:

(require 'reftex)
(require 'post)
(require 'compile)
(require 'textmate)

Entonces, como dije, es posible que tenga que experimentar un poco o leer el código, pero, al final, vale la pena, ya que le ahorrará algo de tiempo si invoca emacs con frecuencia.

rbrito
fuente
1

La mejor manera que he encontrado para que emacs comience rápidamente es demonizar el proceso. Estas instrucciones pertenecen a emacs23. Las versiones anteriores tienen capacidad de servidor / cliente, pero puede ser más difícil de configurar. Cuando inicio sesión en mi escritorio, ejecuto emacs --daemon. Después de esto, cada vez que necesito emacs ejecuto emacsclient -c filenamey aparece al instante. Al usar emacs en modo servidor / cliente, debe dejar el hábito de usar C-x C-cpara salir, en lugar de escribir C-x #. FWIW, esto es algo que emacs23 parece solucionar, ya que en ocasiones me sorprendí escribiendo C-x C-csin matar el proceso del servidor, pero aún mantengo mis viejos hábitos.

Dependiendo de sus requisitos, esto puede funcionar mejor que manipular su configuración con poca ganancia.

umeboshi
fuente