Todos los días enciendo emacs y abro exactamente los mismos archivos que había abierto el día anterior. ¿Hay algo que pueda agregar al archivo init.el para que vuelva a abrir todos los búferes que estaba usando la última vez que salí de emacs?
Todos los días enciendo emacs y abro exactamente los mismos archivos que había abierto el día anterior. ¿Hay algo que pueda agregar al archivo init.el para que vuelva a abrir todos los búferes que estaba usando la última vez que salí de emacs?
Respuestas:
Puede usar la biblioteca de escritorio de Emacs :
Puede guardar el escritorio manualmente con el comando Mx desktop-save. También puede habilitar el guardado automático del escritorio cuando sale de Emacs, y la restauración automática del último escritorio guardado cuando se inicia Emacs: use el búfer de personalización (vea Personalización fácil) para configurar el modo de guardado de escritorio en t para sesiones futuras, o agregue esta línea en su archivo ~ / .emacs:
(desktop-save-mode 1)
M-:
ejecutando (setq debug-on-error t)
, luego llame desktop-revert
y podría detectar el error ofensivo en el depurador. Para mí, era una configuración global que se suponía que era un búfer local, lo que provocaba que fallara la restauración del marco. (Sólo usando emacs --debug-init
podría coger el tema también, pero utilizado método anterior.)
Aunque sospecho que la pregunta buscaba la funcionalidad de "escritorio" de emacs (ver la respuesta anterior), el enfoque de Lewap puede ser útil si el conjunto de archivos que uno usa realmente es exactamente el mismo conjunto de archivos. De hecho, uno puede ir un paso más allá y definir 'perfiles' si tiene diferentes conjuntos de archivos usados regularmente ... Ejemplo rápido:
(let ((profile
(read-from-minibuffer "Choose a profile (acad,dist,lisp,comp,rpg): ")
))
(cond
((string-match "acad" profile)
(dired "/home/thomp/acad")
(dired "/home/thomp/acad/papers")
)
((string-match "lisp" profile)
(setup-slime)
(lisp-miscellany)
(open-lisp-dirs)
)
((string-match "rpg" profile)
(find-file "/home/thomp/comp/lisp/rp-geneval/README")
(dired "/home/thomp/comp/lisp/rp-geneval/rp-geneval")
... etc.
Si descubre que cambia regularmente entre diferentes conjuntos de archivos de uso regular mientras trabaja, considere usar perspectivas y completar cada perspectiva con el conjunto deseado de archivos de uso regular.
Para almacenar / restaurar los búferes / pestañas (específicamente pestañas elscreen): uso elscreen y la forma en que administro el almacenamiento / restauración de la sesión de escritorio y la configuración de la pestaña elscreen es el siguiente código en mi archivo .emacs (los nombres utilizados son autoexplicativos y si las funciones de almacenamiento / restauración no deben ejecutarse cada vez que emacs comienza, simplemente comente las líneas con "(presione # 'elscreen-store kill-emacs-hook)" y "(elscreen-restore)"):
(defvar emacs-configuration-directory
"~/.emacs.d/"
"The directory where the emacs configuration files are stored.")
(defvar elscreen-tab-configuration-store-filename
(concat emacs-configuration-directory ".elscreen")
"The file where the elscreen tab configuration is stored.")
(defun elscreen-store ()
"Store the elscreen tab configuration."
(interactive)
(if (desktop-save emacs-configuration-directory)
(with-temp-file elscreen-tab-configuration-store-filename
(insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
"Restore the elscreen tab configuration."
(interactive)
(if (desktop-read)
(let ((screens (reverse
(read
(with-temp-buffer
(insert-file-contents elscreen-tab-configuration-store-filename)
(buffer-string))))))
(while screens
(setq screen (car (car screens)))
(setq buffers (split-string (cdr (car screens)) ":"))
(if (eq screen 0)
(switch-to-buffer (car buffers))
(elscreen-find-and-goto-by-buffer (car buffers) t t))
(while (cdr buffers)
(switch-to-buffer-other-window (car (cdr buffers)))
(setq buffers (cdr buffers)))
(setq screens (cdr screens))))))
(elscreen-restore)
emacs-configuration-directory
con el user-emacs-directory
que Emacs ya proporciona.
Hay mejoras útiles que puede realizar en la función básica del escritorio. Particularmente útiles (IMO) son los métodos para guardar automáticamente el escritorio durante la sesión, ya que de lo contrario, si su sistema falla, se quedará atascado con el archivo de escritorio con el que había comenzado esa sesión, bastante molesto si tiende a mantener Emacs funcionando durante muchos días a la vez.
http://www.emacswiki.org/emacs/DeskTop
La wiki también tiene información útil sobre la persistencia de datos entre sesiones en general:
http://www.emacswiki.org/emacs/SessionManagement
Específicamente para computadoras de escritorio, pensé que Desktop Recover parecía particularmente prometedor, sin embargo, aún no lo he probado.
(find-file-noselect "/my/file")
lo abrirá silenciosamente, es decir, sin aumentar el búfer. Solo digo.
EDITAR Este comando no es interactivo ; Para probarlo, debe evaluar la expresión, por ejemplo, colocando el cursor después del último paréntesis y presionando Cx Ce
Votar en contra de esto no está bien ; este comando definitivamente funciona y está en el alcance de la pregunta.