如何让emacs自动从初始目录加载和保存桌面?

6
我通常同时处理3-4个不同的项目。所以我正在尝试想办法让emacs从我打开它的文件夹中加载桌面,并在退出emacs实例时保存到该文件中。
我看到的所有文档都描述了如何让emacs自动从默认位置打开和保存(这使多个桌面成为不可能),或者手动加载和保存桌面到特定目录(我现在正在做)。
谢谢!

1
您可以通过 (desktop-read DIRNAME)(desktop-save DIRNAME) 手动加载和保存桌面。在每种情况下,您应将 DIRNAME 绑定到您的文件夹名称。 - artscan
Artscan:我目前在打开和关闭emacs时运行M-x desktop-change-dir和M-x desktop-save,但我正在尝试找到一种自动化的方法。您是建议我在init.el中编写一些lisp代码吗?如果是这样,您能否给我更多细节?我对这方面完全不熟悉。谢谢! - patrickkidd
是的,没有elisp你做不到。请看我的回答。 - artscan
1
最好使用desktop+,正如@Francesco所提到的那样,而且你可以不用elisp来实现。 :) - artscan
3个回答

7

将以下代码添加到你的 .emacs 文件中:

(setq your-own-path default-directory)
(if (file-exists-p
     (concat your-own-path ".emacs.desktop"))
    (desktop-read your-own-path))

(add-hook 'kill-emacs-hook
      `(lambda ()
        (desktop-save ,your-own-path t)))

更新:版本2,按需忽略。

(setq your-own-path default-directory)
(if (file-exists-p
     (concat your-own-path ".emacs.desktop"))
    (if (y-or-n-p "Read .emacs.desktop and add hook?")
    (progn
      (desktop-read your-own-path)
      (add-hook 'kill-emacs-hook
            `(lambda ()
               (desktop-save ,your-own-path t))))))

1
你还需要提供RELEASE参数以避免留下锁定文件;因此实际上是:\(lambda () (desktop-save ,default-directory t))`。 - phils
是的,我没有检查它。 :) - artscan
1
两个问题:1)代码尝试将桌面文件保存在编辑器当前所在的默认目录中。是否可能存储用于加载桌面文件的文件路径,然后确保将会话保存到同一文件中。否则,如果您进入子目录并退出,则会在那里保存另一个桌面。2)这段代码仍然为我留下了锁定文件。也许RELEASE参数是错误的? - patrickkidd
1
  1. 你应该使用自己的变量来控制文件路径,而不是使用default-directory。 2)desktop-save带有RELEASE参数时,现在尝试删除default-directory中桌面锁定文件。因此,如果您解决了1)的问题,那么2)应该能够正常工作。
- artscan
我修复了答案。变量 your-own-path 存储了 Emacs 实例创建时 default-directory 的值。 - artscan
显示剩余3条评论

3
我开发了一小组管理多个桌面的函数:desktop+。您可能想要查看它。不过,我的工作流程与您的不完全相同:
  1. 我总是从同一个目录运行emacs(我在我的窗口管理器中使用快捷键运行它),这意味着我不能依靠起始目录来确定我想要使用哪个桌面

  2. 当我第一次处理新项目时,我调用 M-xdesktop-create 并提供一个名称。然后将桌面保存到中央位置(默认情况下为“~/.emacs.d/desktops”)

  3. 每次我想要使用已保存的桌面时,我运行 M-xdesktop-load,并得到一个已保存会话的列表,其中我可以快速检索所需会话的名称。

会话总是在emacs退出或加载另一个会话时保存。

每次处理完会话后,如何更新会话?再次运行 desktop-create 吗? - patrickkidd
1
通过设置 (setq desktop-save t),桌面在必要时会自动保存。 - François Févotte
一点反馈,我非常喜欢Desktop+,现在我所有的项目都在使用它。谢谢 :) - patrickkidd

2

对于一个非常简单的答案,我将以下内容放在我的.emacs文件的末尾。如果您将桌面保存在项目文件夹中并从该文件夹启动emacs,则它可以正常工作。

(desktop-change-dir default-directory)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接