Jeden Tag starte ich Emacs und öffne genau die Dateien, die ich am Tag zuvor geöffnet hatte. Kann ich der Datei init.el etwas hinzufügen, damit alle Puffer, die ich beim letzten Beenden von Emacs verwendet habe, erneut geöffnet werden?
Jeden Tag starte ich Emacs und öffne genau die Dateien, die ich am Tag zuvor geöffnet hatte. Kann ich der Datei init.el etwas hinzufügen, damit alle Puffer, die ich beim letzten Beenden von Emacs verwendet habe, erneut geöffnet werden?
Antworten:
Sie können die Emacs Desktop-Bibliothek verwenden :
Sie können den Desktop manuell mit dem Befehl Mx desktop-save speichern. Sie können auch das automatische Speichern des Desktops beim Beenden von Emacs und die automatische Wiederherstellung des zuletzt gespeicherten Desktops beim Starten von Emacs aktivieren: Verwenden Sie den Anpassungspuffer (siehe Einfache Anpassung), um den Desktop-Speichermodus für zukünftige Sitzungen auf t zu setzen, oder fügen Sie ihn hinzu Diese Zeile in Ihrer ~ / .emacs-Datei:
(desktop-save-mode 1)
M-:
Ausführen (setq debug-on-error t)
, rufen desktop-revert
Sie dann auf und es kann den fehlerhaften Fehler im Debugger abfangen. Für mich war es eine globale Einstellung, die pufferlokal sein sollte, was dazu führte, dass die Frame-Wiederherstellung fehlschlug. (Nur mit emacs --debug-init
könnte das Problem auch fangen, aber ich habe frühere Methode verwendet.)
Obwohl ich vermute, dass die Frage nach der "Desktop" -Funktion von emacs suchte (siehe Antwort oben), kann Lewaps Ansatz nützlich sein, wenn der verwendete Dateisatz wirklich genau der gleiche Dateisatz ist. Tatsächlich kann man noch einen Schritt weiter gehen und "Profile" definieren, wenn man verschiedene Sätze regelmäßig verwendeter Dateien hat ... Quickie-Beispiel:
(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.
Wenn Sie feststellen, dass Sie während der Arbeit regelmäßig zwischen verschiedenen Sätzen regelmäßig verwendeter Dateien hin- und herwechseln, sollten Sie Perspektiven verwenden und jede Perspektive mit dem gewünschten Satz regelmäßig verwendeter Dateien füllen.
Zum Speichern / Wiederherstellen der Puffer / Registerkarten (insbesondere der elscreen-Registerkarten): Ich verwende elscreen und die Art und Weise, wie ich die Desktop-Sitzung und die Konfiguration der elscreen-Registerkarten speichere / wiederherstelle, ist der folgende Code in meiner .emacs-Datei (die verwendeten Namen sind selbsterklärend und wenn die Speicher- / Wiederherstellungsfunktionen nicht jedes Mal ausgeführt werden sollen, wenn emacs startet, kommentieren Sie einfach die Zeilen mit "(push # 'elscreen-store kill-emacs-hook)" und "(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
mit user-emacs-directory
dem Emacs bereits zur Verfügung stellt.
Es gibt nützliche Verbesserungen, die Sie an der grundlegenden Desktop-Funktion vornehmen können. Besonders praktisch (IMO) sind Methoden zum automatischen Speichern des Desktops während der Sitzung, da Sie sonst bei einem Systemabsturz an der Desktop-Datei hängen bleiben, mit der Sie diese Sitzung gestartet haben - ziemlich ärgerlich, wenn Sie Emacs für viele laufen lassen Tage auf einmal.
http://www.emacswiki.org/emacs/DeskTop
Das Wiki enthält außerdem nützliche Informationen zum Speichern von Daten zwischen Sitzungen im Allgemeinen:
http://www.emacswiki.org/emacs/SessionManagement
Speziell für Desktops fand ich Desktop Recover besonders vielversprechend, habe es aber noch nicht ausprobiert.
(find-file-noselect "/my/file")
öffnet es lautlos, dh ohne den Puffer anzuheben. Nur sagen.
BEARBEITEN Dieser Befehl ist nicht interaktiv . Um es zu testen, müssen Sie den Ausdruck auswerten, indem Sie beispielsweise den Cursor nach der letzten Klammer positionieren und Cx Ce drücken
Downvoting ist nicht cool ; Dieser Befehl funktioniert definitiv und ist im Rahmen der Frage.