Ich musste die Desktop-Dateien genau wie Sie verwalten. Sie haben für jedes Projekt eine separate Desktop-Datei und speichern Puffer, Emacs-Variablen usw. unabhängig voneinander.
Das konnte ich mit einem Paket namens erreichen bookmark+
.
Lesezeichen +
Library Bookmark + verwaltet verschiedene Arten von Lesezeichen. Eines davon sind Desktop-Lesezeichen .
Nach der Installation des Pakets
- Sie müssen
(require 'bookmark+)
in Ihrem habeninit.el
- Um ein Lesezeichen für jedes Projekt zu erstellen, richten Sie die gewünschten Puffer für jedes Projekt ein und führen Sie
M-x bmkp-set-desktop-bookmark
oder aus C-x p K. Daraufhin werden Sie gefragt, wo Sie die Desktop-Datei speichern möchten, und Sie können sie im Ordner dieses Projekts speichern.
- Nachdem Sie die Desktop-Lesezeichen für alle Projekte festgelegt haben, können Sie mit
M-x bmkp-desktop-jump
oder zu verschiedenen Lesezeichen springen C-x j K.
Das Lesezeichen + Dokument im Emacs-Wiki ist sehr informativ, wenn Sie mehr über dieses Paket erfahren möchten.
desktop.el
Darüber hinaus habe ich folgende Möglichkeiten, um das desktop
Paket einzurichten, in dem ich auswählen kann, was alles pro Desktop gespeichert werden soll
(desktop-save-mode 1)
;; Source: https://github.com/purcell/emacs.d/blob/master/lisp/init-sessions.el
; save a bunch of variables to the desktop file
;; for lists specify the len of the maximal saved data also
(setq desktop-globals-to-save
(append '((comint-input-ring . 50)
(compile-history . 30)
desktop-missing-file-warning
(dired-regexp-history . 20)
(extended-command-history . 30)
(face-name-history . 20)
(file-name-history . 100)
(grep-find-history . 30)
(grep-history . 30)
(ido-buffer-history . 100)
(ido-last-directory-list . 100)
(ido-work-directory-list . 100)
(ido-work-file-list . 100)
(magit-read-rev-history . 50)
(minibuffer-history . 50)
(org-clock-history . 50)
(org-refile-history . 50)
(org-tags-history . 50)
(query-replace-history . 60)
(read-expression-history . 60)
(regexp-history . 60)
(regexp-search-ring . 20)
register-alist
(search-ring . 20)
(shell-command-history . 50)
tags-file-name
tags-table-list)))
Speichern projektspezifischer Desktops beim Beenden von Emacs
Ich finde es nützlich, die folgende Funktion zu binden, C-x C-cdamit die Desktops automatisch gespeichert werden, wenn ich Emacs beende.
(defun save-desktop-save-buffers-kill-emacs ()
"Save buffers and current desktop every time when quitting emacs."
(interactive)
(desktop-save-in-desktop-dir)
(save-buffers-kill-emacs))
Manchmal möchte ich den Desktop beim Beenden von Emacs nicht speichern. Für diese Gelegenheiten benutze ich diese andere Funktion und habe sie daran gebunden C-x M-c.
;; Kill emacs when running in daemon mode or not
;; Source: http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00348.html
(defun tv-stop-emacs ()
(interactive)
(if (daemonp)
(save-buffers-kill-emacs)
(save-buffers-kill-terminal)))
desktop-eve
"ask-if-new" `?Ich verwende normalerweise das folgende Setup, um die Desktop-Datei aus dem lokalen Verzeichnis der jeweiligen Projekte zu speichern und zu laden / lesen:
Dies ist nicht ohne Probleme, da beim Wechseln von Projekten über z. B. Projektile oder andere Projektmanagement-Dienstprogramme keine Desktop-Dateien geladen werden. Ich kann jedoch die
projectile-after-switch-project-hook
Funktion verwenden, um eine private Funktion aufzurufen, um die erforderlichen Aufgaben zu erledigenquelle