2011-05-28 7 views
5

Utilizo la siguiente estructura en la configuración de mi emacs: para cada modo de programación que uso, mantengo la configuración en un archivo llamado programming-mode-config.el. (Entonces, la configuración de python irá a python-mode-config.el, etc.).¿Cómo uso la carga automática para cargar correctamente la configuración personalizada?

Anteriormente, solía requerir cada uno de estos archivos en mi init.el. El inconveniente de este enfoque fue que mi tiempo de puesta en marcha fue enorme. Así que este fin de semana, me senté y convertí todo lo necesario en autocarga. Ahora mi archivo de inicio se ve así:

(autoload 'python-mode "python-mode-config" "Load python config" t) 

config Así pitón no se cargará hasta que abra un archivo de pitón. Esto ayudó a reducir mi tiempo de inicio a aproximadamente 1 segundo, pero no funciona correctamente en todos los casos. Por ejemplo,

(autoload 'erc "erc-mode-config" "Load configuration for ERC" t) 

no carga mis ajustes erc en absoluto. En cuanto a la documentación de carga automática, se establece que:

Define FUNCTION to autoload from FILE. 
... 
If FUNCTION is already defined other than as an autoload, 
this does nothing and returns nil. 

Así que supongo que la configuración de ERC no se ha cargado porque ERC viene 'incorporado' con emacs, mientras que pitón-mode es un plugin que uso. ¿Hay alguna forma de que pueda hacer que mi configuración erc se cargue solo cuando realmente uso erc? La única otra alternativa que veo es usar eval-after-load, pero sería bastante doloroso poner cada pequeña parte de mi personalización en un eval-after-load.

Me temo que también podría ser que no he asimilado las autocargaciones correctamente. Cualquier ayuda sería apreciada.

Respuesta

10

autoload está destinado a ser utilizado para cargar las funciones de un determinado archivo, no cargar funcionalidad adicional - que es lo que parece que está tratando de hacer.

Uso eval-after-load lugar:

(eval-after-load "erc" '(load "erc-mode-config")) 

Eso le dice a Emacs a cargar la biblioteca erc-mode-config después de que el archivo se ha cargado "erc" - que es lo que desea. También puede usar '(require 'erc-mode-config) si tiene una declaración provide dentro de ella.

El uso correcto de autoload es cargar el archivo real que contiene el símbolo. Por lo tanto, al tener

(autoload 'erc "erc-mode-config" "Load configuration for ERC" t) 

estaban diciendo Emacs para encontrar la función erc mediante la carga de la biblioteca "erc-mode-config", que no es el que se define la función erc. Además, docstring es para la función en cuestión, por lo que la instrucción anterior autoload hace que la cadena de ayuda para erc sea "Load configuration for ERC" - que también es incorrecta.

Supongo que su primer ejemplo autoload funciona porque tiene una declaración (require 'python) en su archivo de configuración ... pero eso es solo una suposición.

+0

Gracias, tuve la sensación de que mis autocargadores estaban equivocados :) – vedang

+0

Además, tenías razón. Mi configuración anterior tenía (requiere 'python) seguido de (requiere' python-mode-config). Moví el comando (require 'python) al archivo python-mode-config cuando lo reescribí como carga automática. Ahora estoy sentado y reparando todos mis autocargadores y eval-after-loads. – vedang

Cuestiones relacionadas