Eu precisava gerenciar os arquivos da área de trabalho como você; tenha um arquivo de área de trabalho separado para cada projeto e salve buffers, variáveis do Emacs, etc, independentemente para cada um.
Consegui fazer isso usando um pacote chamado bookmark+
.
marcador +
O Marcador de Biblioteca + gerencia diferentes tipos de marcadores, um deles é o Marcador de Mesa .
Depois de instalar o pacote,
- Você precisa ter
(require 'bookmark+)
no seuinit.el
- Para criar um marcador para cada projeto, configure os buffers que você deseja para cada projeto e faça
M-x bmkp-set-desktop-bookmark
ou C-x p K. Isso perguntará onde você deseja salvar o arquivo da área de trabalho e poderá optar por salvá-lo na pasta do projeto.
- Depois de definir os marcadores da área de trabalho para todos os projetos, você pode pular para marcadores diferentes usando
M-x bmkp-desktop-jump
ou C-x j K.
O documento Bookmark + no Emacs Wiki é muito informativo se você quiser saber mais sobre este pacote.
desktop.el
Além disso, tenho o seguinte para configurar o desktop
pacote onde posso escolher o que tudo que eu quero salvar por área de trabalho
(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)))
Salvando áreas de trabalho específicas do projeto ao sair do emacs
Acho útil vincular a função abaixo para C-x C-cque os desktops sejam salvos automaticamente quando eu sair do 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))
Às vezes, eu não gostaria de salvar a área de trabalho ao sair do emacs. Para essas ocasiões, eu uso essa outra função e a vinculei 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`` `?Costumo usar a seguinte configuração para salvar e carregar / ler o arquivo da área de trabalho no diretório local dos respectivos projetos:
Isso não ocorre sem problemas, pois a troca de projetos via, por exemplo, projéteis ou outros utilitários de gerenciamento de projetos, não carrega nenhum arquivo da área de trabalho, mas eu poderia utilizar a
projectile-after-switch-project-hook
função para chamar uma função privada para fazer o necessário.fonte