Мне нужно было управлять файлами на рабочем столе так же, как вы; иметь отдельный файл рабочего стола для каждого проекта и сохранять буферы, переменные Emacs и т. д. независимо для каждого.
Я смог добиться этого с помощью пакета под названием bookmark+
.
закладка +
Библиотека Bookmark + управляет различными типами закладок, одна из которых - закладки на рабочем столе .
После установки пакета,
- Вы должны иметь
(require 'bookmark+)
в своемinit.el
- Чтобы создать закладку для каждого проекта, настройте буферы для каждого проекта и выполните
M-x bmkp-set-desktop-bookmark
или C-x p K. Это спросит вас, где вы хотите сохранить файл рабочего стола, и вы можете сохранить его в папке этого проекта.
- После того, как вы установили закладки рабочего стола для всех проектов, вы можете перейти к различным закладкам, используя
M-x bmkp-desktop-jump
или C-x j K.
Закладка + док на Emacs Wiki является очень информативным , если вы хотите узнать больше об этом пакете.
desktop.el
В дополнение к этому, у меня есть следующее, чтобы настроить desktop
пакет, в котором я могу выбрать то, что я хочу сохранить для каждого рабочего стола
(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)))
Сохранение рабочих столов для конкретного проекта при выходе из emacs
Я считаю полезным связать приведенную ниже функцию с C-x C-cтем, чтобы рабочие столы автоматически сохранялись при выходе из 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))
Иногда я не хотел бы сохранять рабочий стол при выходе из emacs. В этих случаях я использую эту другую функцию и привязываю ее к 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`` `?Я склонен использовать следующую настройку для сохранения и загрузки / чтения файла рабочего стола из локального каталога соответствующих проектов:
Это не без проблем, так как переключение проектов с помощью, например, projectile или других утилит управления проектами не загружает какие-либо файлы рабочего стола, но я мог бы использовать
projectile-after-switch-project-hook
функцию для вызова частной функции, чтобы сделать необходимуюисточник