Antworten:
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+
.
Library Bookmark + verwaltet verschiedene Arten von Lesezeichen. Eines davon sind Desktop-Lesezeichen .
Nach der Installation des Pakets
(require 'bookmark+)
in Ihrem habeninit.el
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.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.
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)))
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:
(require 'desktop)
(setq desktop-path (list "./"))
(desktop-save-mode 1)
(desktop-read)
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 erledigen