45 Guardar Sesiones de Emacs

Puede usar la biblioteca de escritorio (desktop library) para guardar el estado de Emacs de una sesión a otra. La configuración del escritorio guardada de Emacs incluye los búferes, sus nombres de archivo, modos principales, posiciones de los búferes, configuración de ventanas y marcos, y algunas variables globales importantes.

Para habilitar esta característica, use el búfer de personalización (ver 50.1 Interfaz de Personalización Fácil) para establecer desktop-save-mode a t para futuras sesiones, o añada esta línea en su fichero init (ver 50.4. El Archivo de Inicialización de Emacs):

(desktop-save-mode 1)

Si activa desktop-save-mode en su fichero init, cuando Emacs se inicia, busca un escritorio guardado en desktop-path (que por defecto es user-emacs-directory y luego su directorio home) y usa el primer escritorio que encuentra. Mientras Emacs se ejecuta con el modo desktop-save activado, por defecto auto-guarda el escritorio cada vez que cambia la configuración del mismo. La variable desktop-auto-save-timeout determina la frecuencia con la que Emacs busca modificaciones en su escritorio. El escritorio también se guarda cuando sale de Emacs.

Especifique la opción --no-desktop en la línea de comandos de Emacs cuando no quiera que recargue ninguna configuración de escritorio guardada. Esto desactiva el modo de guardar escritorio para la sesión actual. Arrancar Emacs con la opción --no-init-file también desactiva la recarga del escritorio, ya que se salta el archivo init, donde normalmente se activa el modo desktop-save.

Puede tener configuraciones de escritorio guardadas por separado en diferentes directorios; iniciar Emacs desde un directorio donde tiene una configuración de escritorio guardada restaurará esa configuración, siempre que personalice desktop-path para que anteponga . (el directorio actual) a los otros directorios allí. Puede guardar el escritorio actual y recargar el guardado en otro directorio escribiendo Alt-x desktop-change-dir (M-x desktop-change-dir). Tecleando Alt-x desktop-revert (M-x desktop-revert) se vuelve al escritorio previamente recargado.

El archivo en el que Emacs guarda el escritorio está bloqueado mientras se ejecuta la sesión, para evitar sobrescribirlo inadvertidamente desde otra sesión de Emacs. Ese bloqueo se elimina normalmente cuando Emacs sale, pero si Emacs o su sistema se bloquea, el bloqueo permanece, y cuando reinicia Emacs, por defecto le preguntará si quiere usar el fichero de escritorio bloqueado. Puede evitar la pregunta personalizando la variable desktop-load-locked-desktop a nil, que significa no cargar nunca el escritorio en este caso, o a t, que significa cargar el escritorio sin preguntar. También puede personalizar la variable con el valor especial check-pid, que significa cargar el archivo si el proceso Emacs que ha bloqueado el escritorio no se está ejecutando en la máquina local. Esto no debería usarse en circunstancias en las que el Emacs que ha bloqueado el escritorio pueda estar ejecutándose en otra máquina, lo que podría ser el caso en entornos multiusuario en los que su directorio personal está montado remotamente usando NFS o similar.

Cuando Emacs arranca en modo demonio, no puede hacerle ninguna pregunta, así que si encuentra el fichero de escritorio bloqueado, no lo cargará, a menos que desktop-load-locked-desktop sea t. Tenga en cuenta que restaurar el escritorio en modo demonio es algo problemático por otras razones: por ejemplo, el demonio no puede usar características de la GUI, así que parámetros como la posición del marco, el tamaño y las decoraciones no pueden restaurarse. Por esa razón, puede que desee retrasar la restauración del escritorio en modo demonio hasta que se conecte el primer cliente, llamando a desktop-read (ver más abajo) en una función de gancho que añada a server-after-make-frame-hook (ver Creando Marcos en El Manual de Referencia de Emacs Lisp).

Siempre que quiera, puede usar el comando M-x desktop-save para forzar el guardado inmediato del escritorio actual. Esto es útil si no quiere usar la restauración automática del escritorio, y por tanto no activa desktop-save-mode, o cuando ha hecho cambios significativos en el escritorio, y quiere asegurarse de que la configuración no se pierde si Emacs o su sistema se bloquean. Puede usar M-x desktop-read para restaurar un escritorio previamente guardado si la sesión actual de Emacs aún no ha cargado ningún escritorio.

Por defecto, el escritorio intenta guardar y restaurar la configuración de marcos y ventanas. Para desactivar esto, establezca desktop-restore-frames a nil. (Consulte la documentación de esa variable para ver algunas opciones relacionadas que puede personalizar para afinar este comportamiento).

Cuando el escritorio restaura la configuración de marcos y ventanas, usa los valores registrados de los parámetros de los marcos, ignorando cualquier configuración para esos parámetros que tenga en su fichero de inicialización (ver 50.4. El Archivo de Inicialización de Emacs). Esto significa que los parámetros de los marcos restaurados, como las fuentes y las caras, provendrán del archivo del escritorio, donde fueron guardados cuando salió de su sesión anterior de Emacs; cualquier configuración de esos parámetros en su archivo de inicialización sera ignorada. Para desactivar esto, personalice el valor de frameset-filter-alist para filtrar los parámetros de marco que no quiere que se restauren; entonces se establecerán de acuerdo a sus personalizaciones en el archivo init.

La información sobre los búferes que visitan archivos remotos no se guarda por defecto. Personalice la variable desktop-files-not-to-save para cambiar esto.

Por defecto, todos los búferes del escritorio se restauran de una sola vez. Sin embargo, esto puede ser lento si hay muchos búferes en el escritorio. Puede especificar el número máximo de búferes a restaurar inmediatamente con la variable desktop-restore-eager; el resto de ellos se restauran lentamente, cuando Emacs está inactivo.

Escriba Alt-x desktop-clear (M-x desktop-clear) para vaciar el escritorio de Emacs; esto puede ser útil, por ejemplo, si quiere cambiar a otro escritorio invocando M-x desktop-read next. El comando desktop-clear elimina todos los búferes excepto los internos, y borra las variables globales listadas en desktop-globals-to-clear. Si desea que conserve ciertos búferes, personalice la variable desktop-clear-preserve-búferes-regexp, cuyo valor es una expresión regular que coincide con los nombres de los búferes que no debe eliminar.

Si desea guardar el historial de minibúferes de una sesión a otra, utilice la biblioteca savehist.