回答:
私はあなたと同じようにデスクトップファイルを管理する必要がありました。プロジェクトごとに個別のデスクトップファイルを用意し、バッファー、Emacs変数などをそれぞれ独立して保存します。
というパッケージを使用してそれを達成することができましたbookmark+
。
Library Bookmark +は、さまざまなタイプのブックマークを管理します。そのうちの1つがデスクトップブックマークです。
パッケージをインストールした後、
(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 のBookmark +文書は、このパッケージについて詳しく知りたい場合に非常に役立ちます。
それに加えて、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)))
以下の関数をバインドして、C-x C-cemacsを終了したときにデスクトップが自動的に保存されるようにすると便利です。
(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`` に使用することとは異なります`?
次の設定を使用して、各プロジェクトのローカルディレクトリからデスクトップファイルを保存および読み込み/読み込みする傾向があります。
(require 'desktop)
(setq desktop-path (list "./"))
(desktop-save-mode 1)
(desktop-read)
たとえば、発射体または他のプロジェクト管理ユーティリティを介してプロジェクトを切り替えると、デスクトップファイルが読み込まれないため、これには問題がないわけではありませんがprojectile-after-switch-project-hook
、プライベート関数を呼び出す関数を使用して、必要なことを行うことができます