Utilisation de DeskTop pour la gestion de projet de base

12

Je voudrais utiliser DeskTop pour la gestion de projet de base, c'est-à-dire ouvrir un ensemble de tampons et restaurer les historiques en fonction du projet sur lequel je travaille. Est-ce possible, c'est-à-dire d'avoir un fichier de bureau dans un répertoire de projet et comment puis-je y parvenir?

Rainer
la source

Réponses:

13

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-bookmarkou 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-jumpou 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 desktoppackage 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)))
Kaushal Modi
la source
Merci - cela semble TRÈS prometteur. J'ai trouvé la combinaison de signets + et DeskTop auparavant, mais je n'ai pas pu trouver un moyen concis de le faire. Cela sonne bien. Je vais l'essayer les derniers lundis!
Rainer
1
Notez que, contrairement au cas des commandes de bureau vanilla Emacs, Bookmark + signets de bureau sont destinés à basculer entre plusieurs bureaux. IOW, vous pouvez avoir plusieurs fichiers de bureau. Et vos fichiers de bureau peuvent être n'importe où. Ils n'ont pas besoin d'être dans des répertoires différents. L'utilisation de Vanilla sur le bureau suppose que vous n'avez qu'un seul fichier de bureau par répertoire.
Drew
@kaushalmodi Merci - génial. Et maintenant, j'ai beaucoup à lire sur le signet + - mais il veut exactement ce que je veux.
Rainer
@Drew c'est exactement ce que je cherchais - et cela fonctionne comme un charme.
Rainer
@kaushalmodi Je suppose que vous utilisez votre fonction de sortie pour pouvoir quitter emacs sans enregistrer le bureau - ou y a-t-il une différence, quand vous voulez toujours sauvegarder le bureau, à utiliser la variable desktop-evepour `` demander-si-nouveau '' '?
Rainer
0

J'ai tendance à utiliser la configuration suivante pour enregistrer et charger / lire le fichier de bureau à partir du répertoire local des projets respectifs:

 (require 'desktop)
 (setq desktop-path (list "./"))
 (desktop-save-mode 1)
 (desktop-read)

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-hookfonction pour appeler une fonction privée pour faire le nécessaire

ashraf
la source