2010-12-05 17 views
16

Tengo un búfer en algún modo mayor, y en otro búfer el archivo de modo en sí (* .el). Después de editar el archivo * .el, quiero ver los cambios reflejados en el primer buffer, sin reiniciar emacs. Traté de ejecutar la función -mode pero no cambió el buffer. Gracias¿Cómo volver a cargar un modo principal de emacs?

Respuesta

0

Cuando edite el origen de un modo, debe asegurarse de evaluar las funciones que cambia; guardarlas en un archivo por sí solo no será suficiente, ya que internamente Emacs seguirá utilizando el código anterior.

Por ejemplo, podría saltar al final de la definición de la función en la que trabaja con M-C-e y evaluar la función con C-x C-e. A partir de ese momento, Emacs usará la definición actual.

Esto también funciona para la definición de modo, pero muchas veces invocar un modo con Mx mode-name se implementa como un alternar: lo llama una vez, activa el modo, lo llama de nuevo, desactiva el modo . Entonces puede que tenga que hacer M-x mode-name dos veces.

+0

Para todas las formas diferentes de (re) evaluación de elisp, consulte http://www.masteringemacs.org/articles/2010/11/29/evaluating-elisp-emacs/ – phils

14
M-x load-file your-mode.el 

o

M-x eval-buffer 

luego cambie el comportamiento dentro y fuera de la memoria intermedia, presumiblemente por hacer

M-x your-mode 
M-x your-mode 

O, si su modo reconoce el argumento prefijo

C-u 1 M-x your-mode 

Nota: Cuando estás lo Al agregar un archivo, defvar no anula los valores existentes, por lo que si cambia los valores en la llamada al defvar, deberá evaluarlos específicamente, haciendo CMx cuando su cursor esté en la expresión devfar, o usando Mx: y escribiendo en la expresión. Consulte this page para obtener documentación sobre la evaluación de lisp en Emacs.

+1

En lugar de alternar el modo, también puede do 'Mx normal-mode' – scottfrazer

26

Si su modo proporciona una característica (como debe ser!) Usando (provide 'foo-mode) entonces se puede

M-x unload-feature RET foo-mode RET

y luego cargar el modo nuevo de forma normal (usando foo-mode si tiene una carga automática apropiada, o el uso de load-library o load-file de lo contrario).

+3

No había visto esto antes. La documentación señala que esto generará un error si hay otro código cargado que requiera la función, pero puede forzar la descarga utilizando un prefijo arg. – phils

+0

Es útil tener en cuenta los casos en que otro código cargado utiliza su módulo, porque incluso si recarga su módulo, el otro módulo puede seguir refiriéndose a definiciones de funciones antiguas. En este caso, también deberá volver a cargar el otro módulo para que se refiera a las nuevas definiciones. –

+0

+1, esto lo hizo por mí, en combinación con la respuesta de Trey Jackson. –

Cuestiones relacionadas