J'avais besoin de gérer les fichiers du bureau comme vous; avoir un fichier de bureau séparé pour chaque projet et enregistrer des tampons, des variables Emacs, etc. indépendamment pour chacun.
J'ai pu y parvenir en utilisant un package appelé bookmark+
.
signet +
Library Bookmark + gère différents types de signets, l'un d'eux étant Desktop Bookmarks .
Après avoir installé le package,
- Vous devez avoir
(require 'bookmark+)
dans votreinit.el
- Pour créer un signet pour chaque projet, configurez les tampons que vous souhaitez pour chaque projet et faites
M-x bmkp-set-desktop-bookmark
ou C-x p K. Cela vous demandera où vous souhaitez enregistrer le fichier du bureau et vous pouvez choisir de l'enregistrer dans le dossier de ce projet.
- Une fois que vous avez défini les signets de bureau pour tous les projets, vous pouvez passer à différents signets à l'aide de
M-x bmkp-desktop-jump
ou C-x j K.
Le document Bookmark + doc sur Wiki Emacs est très informatif si vous voulez en savoir plus sur ce paquet.
desktop.el
En plus de cela, j'ai les éléments suivants pour configurer le desktop
package où je peux choisir tout ce que je veux enregistrer par bureau
(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)))
Enregistrement de bureaux spécifiques au projet lors de la fermeture d'emacs
Je trouve utile de lier la fonction ci-dessous C-x C-cpour que les bureaux soient enregistrés automatiquement lorsque je quitte emacs.
(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))
Parfois, je ne voudrais pas enregistrer le bureau lorsque je quitte emacs. Pour ces occasions, j'utilise cette autre fonction et je l'ai liée à 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
pour `` demander-si-nouveau '' '?J'ai tendance à utiliser la configuration suivante pour enregistrer et charger / lire le fichier de bureau à partir du répertoire local des projets respectifs:
Ce n'est pas sans problèmes car le changement de projet via, par exemple, un projectile ou d'autres utilitaires de gestion de projet ne charge aucun fichier de bureau, mais je peux utiliser la
projectile-after-switch-project-hook
fonction pour appeler une fonction privée pour faire le nécessairela source