Usando o DeskTop para gerenciamento básico de projetos

12

Gostaria de usar o DeskTop para gerenciamento básico de projetos, ou seja, abrir um conjunto de buffers e restaurar históricos, dependendo do projeto em que estou trabalhando. Isso é possível, ou seja, ter um arquivo da área de trabalho em um diretório de projeto e como conseguir isso?

Rainer
fonte

Respostas:

13

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-bookmarkou 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-jumpou 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 desktoppacote 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)))
Kaushal Modi
fonte
Obrigado - isso parece MUITO promissor. Encontrei a combinação de marcadores + e DeskTop antes, mas não consegui encontrar uma maneira concisa de fazer isso. Isso parece ótimo. Vou experimentar as últimas segundas-feiras!
Rainer
1
Observe que, diferentemente do caso dos comandos da área de trabalho do vanilla Emacs, os marcadores + marcadores da área de trabalho destinam-se à alternância entre várias áreas de trabalho. IOW, você pode ter vários arquivos da área de trabalho. E seus arquivos da área de trabalho podem estar em qualquer lugar. Eles não precisam estar em diretórios diferentes. O uso da área de trabalho de baunilha pressupõe que você tenha apenas um arquivo da área de trabalho por diretório.
Desenhou
@kaushalmodi Obrigado - brilhante. E agora tenho muito o que ler sobre o marcador + - mas ele quer exatamente o que eu quero.
Rainer
@ Drew é exatamente isso que eu estava procurando - e funciona como um encanto.
Rainer
@kaushalmodi Suponho que você esteja usando sua função de saída para poder sair do emacs sem salvar a área de trabalho - ou há uma diferença, ao querer sempre salvar a área de trabalho, de usar a variável desktop-eve`` ask-if-new`` `?
Rainer
0

Costumo usar a seguinte configuração para salvar e carregar / ler o arquivo da área de trabalho no diretório local dos respectivos projetos:

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

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-hookfunção para chamar uma função privada para fazer o necessário.

ashraf
fonte