Ogni giorno avvio emacs e apro esattamente gli stessi file che avevo aperto il giorno prima. C'è qualcosa che posso aggiungere al file init.el in modo che riaprirà tutti i buffer che stavo usando l'ultima volta che sono uscito da emacs?
Ogni giorno avvio emacs e apro esattamente gli stessi file che avevo aperto il giorno prima. C'è qualcosa che posso aggiungere al file init.el in modo che riaprirà tutti i buffer che stavo usando l'ultima volta che sono uscito da emacs?
Risposte:
Puoi usare la libreria Emacs Desktop :
Puoi salvare il desktop manualmente con il comando Mx desktop-save. Puoi anche abilitare il salvataggio automatico del desktop quando esci da Emacs e il ripristino automatico dell'ultimo desktop salvato all'avvio di Emacs: usa il buffer di personalizzazione (vedi Easy Customization) per impostare la modalità di salvataggio del desktop su t per sessioni future, oppure aggiungi questa riga nel tuo file ~ / .emacs:
(desktop-save-mode 1)
M-:eseguendolo (setq debug-on-error t), quindi chiama desktop-reverte potrebbe rilevare l'errore incriminato nel debugger. Per me era un'impostazione globale che doveva essere locale del buffer, causando il fallimento del ripristino del frame. (Anche il solo utilizzo emacs --debug-initpotrebbe risolvere il problema, ma ho usato il metodo precedente.)
Sebbene sospetti che la domanda stesse cercando la funzionalità "desktop" di emacs (vedi la risposta sopra), l'approccio di Lewap può essere utile se l'insieme di file che si usa è esattamente lo stesso insieme di file. In effetti, si può fare un ulteriore passo avanti e definire i "profili" se si dispone di diversi set di file utilizzati regolarmente ... Esempio rapido:
(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.
Se ti accorgi di passare regolarmente avanti e indietro tra diversi set di file usati regolarmente mentre lavori, considera l'utilizzo di prospettive e popola ogni prospettiva con il set desiderato di file usati regolarmente.
Per memorizzare / ripristinare i buffer / le schede (in particolare le schede elscreen): io uso elscreen e il modo in cui gestisco l'archiviazione / ripristino della sessione desktop e la configurazione delle schede elscreen è il seguente codice nel mio file .emacs (i nomi usati sono autoesplicativi e se le funzioni di memorizzazione / ripristino non devono essere eseguite ogni volta che emacs si avvia, commentate semplicemente le righe con "(push # 'elscreen-store kill-emacs-hook)" e "(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-directorycon quello user-emacs-directoryche Emacs già fornisce.
Ci sono miglioramenti utili che puoi apportare alla funzionalità desktop di base. Particolarmente utili (IMO) sono i metodi di salvataggio automatico del desktop durante la sessione, altrimenti se il tuo sistema va in crash rimarrai bloccato con il file desktop con cui avevi iniziato quella sessione - abbastanza fastidioso se tendi a mantenere Emacs in esecuzione per molti giorni alla volta.
http://www.emacswiki.org/emacs/DeskTop
Il wiki ha anche informazioni utili sulla persistenza dei dati tra le sessioni in generale:
http://www.emacswiki.org/emacs/SessionManagement
Per i desktop in particolare, ho pensato che Desktop Recover fosse particolarmente promettente, tuttavia non l'ho ancora provato.
(find-file-noselect "/my/file")lo aprirà silenziosamente, cioè senza alzare il buffer. Sto solo dicendo.
EDIT Questo comando non è interattivo ; Per testarlo devi valutare l'espressione, ad esempio posizionando il cursore dopo l'ultima parentesi e premendo Cx Ce
Downvoting questo non è bello ; questo comando funziona sicuramente ed è nell'ambito della domanda.