2009-04-29 11 views
66

Todos los días enciendo emacs y abro exactamente los mismos archivos que tenía abiertos 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?Emacs: ¿reabre buffers desde la última sesión en el inicio?

+0

Parece que el manejo del escritorio es diferente en Emacs 21 y 22+. El tema se describe en esta página: http://www.emacswiki.org/emacs/Desktop. – hji

Respuesta

92

Puede utilizar el Emacs Desktop library:

Puede guardar el escritorio manualmente con el comando M-x-escritorio guardar. Puede también permiten el guardado automático del escritorio al salir de Emacs, y restauración automática de la última escritorio guardado cuando se inicia Emacs: utilice el búfer de personalización (ver Fácil personalización) para establecer escritorio en el Modo Ahorro de t para futuras sesiones , o añadir esta línea en su archivo ~/.emacs :

(desktop-save-mode 1) 
+3

Gran respuesta. Sin embargo, noté que Emacs reorganiza el orden del búfer entre las sesiones. ¿Hay alguna forma de tener siempre la misma orden de almacenamiento intermedio? – axel22

+1

Emacs ... Me encanta. :-) – Jack

2

puede abrir archivos en el fichero .emacs usando la siguiente función:

(find-file "/ home/me/path-to-file")

+1

De acuerdo con su solución, el interlocutor debe escribir en sus dotemacs los nombres de los archivos abiertos recientemente. No es realmente prometedor. –

+1

Él de hecho escribe lo siguiente "... abra los mismos archivos exactos que tenía abiertos el día anterior ...". Si abre los mismos archivos, esas entradas no cambiarían mucho. ¿No estás de acuerdo? – paweloque

+2

@Lewap: el OP es una mujer. Ella no él. Cuidado con las suposiciones. – Telemachus

10

Aunque sospecho que la pregunta estaba buscando la funcionalidad de "escritorio" de emacs (ver 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 uno tiene diferentes conjuntos de archivos que se utilizan con regularidad ... Quickie ejemplo:

(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 encuentra que regularmente se cambia de ida y vuelta entre los diferentes conjuntos de archivos usados ​​regularmente mientras trabaja, considere usar perspectives y llenar cada perspectiva con el conjunto deseado de archivos de uso regular.

2

Existen mejoras útiles que puede realizar en la función de escritorio básico. Particularmente útil (IMO) son los métodos para guardar automáticamente el escritorio durante la sesión, ya que de lo contrario, si el sistema falla, se quedará bloqueado con el archivo de escritorio con el que comenzó esa sesión, bastante molesto si tiende a mantener Emacs funcionando durante muchos días a la vez.

http://www.emacswiki.org/emacs/DeskTop

El wiki también tiene información útil sobre la persistencia de los datos entre las sesiones en general:

http://www.emacswiki.org/emacs/SessionManagement

Para escritorios específicamente, pensé que Desktop Recover parecía particularmente prometedora, sin embargo, no tengo todavía probado.

0

(find-file-noselect "/my/file") se abrirá silenciosamente, es decir, sin levantar el búfer. Solo digo.

EDITAR Este comando es no interactivo; Para probarlo, debe evaluar la expresión, por ejemplo, colocando el cursor después del último paréntesis y presionando C-x C-e

Caída de votos esto es no es genial; este comando definitivamente funciona y está dentro del alcance de la pregunta.

+1

No he votado negativamente, pero tal vez tu respuesta ha sido desestimada porque no aborda el tema de cómo abrir específicamente los buffers que estaban abiertos en la sesión previa de Emacs. –

5

Para almacenar/restaurar las memorias intermedias/tabs (pestañas elscreen específicamente): utilizo elscreen y la forma en que administro almacenar/restaurar la sesión de escritorio y la configuración de la lengüeta elscreen es el siguiente código en mi archivo .emacs (la los nombres utilizados son autoexplicativos y si las funciones de almacenamiento/restauración no se deben ejecutar cada vez que emacs comience, simplemente comenten las líneas con "(push # '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) 
Cuestiones relacionadas