如何像 purcell 大师的配置文件一样,能够在打开 Emacs 后,自动回到上一次关闭 Emacs 前的状态?

如题,我使用了 purcell 的配置文件后,发现在打开 Emacs 时,Emacs 会自动回到上一次使用 Emacs 时的状态。它在启动时会读取一个 .session 文件来回到这个状态。“状态” 指的是编辑的文件、窗口的大小等。如何配置 Emacs 以达到这样的效果?

1 个赞

好吧,原来没有藏那么深。

善用搜索喔。

嗯,是的。我原来就没想过要搜索,因为毕竟是大师的配置,有关配置的函数定是藏得很深,于是便怀着恐惧感来问了。

大师之说从何时起?

我用的第1个配置就是purcell的,挺好用的,皮实。现在在用Spacemacs,editor style还是Emacs,也挺好用,配置其他如LaTeX等更方便,频繁更新时容易出问题。

奇怪的是,像doom-emacs、Spacemacs这样star数更多的作者我却没记住,倒是能记住Purcell,这些人也好像没人称大师。

1 个赞

没有必要这样,其实就算doom那种配置乍一看感觉整得很花的,,其实只是用了很多自创的语法糖,能整出一个emacs starter-kit的都是很强的hacker,把简单事情搞复杂是他们恰恰不会去做的,doom整那么多语法糖(其实就是宏)是为了简化工作量。抄就完事了,攒配置这方面抄是效率最高的 :rofl:

1 个赞
(setq desktop-save t)
;; Restore desktop, should be worked in daemon too.
(defun +restore-desktop()
  (let ((inhibit-message t))
    (run-at-time 1 nil
                 (lambda()
                   (desktop-read)
                   (desktop-save-mode 1)))))
(add-hook 'emacs-startup-hook
              (lambda()
                (if (daemonp)
                    (add-hook 'server-after-make-frame-hook '+restore-desktop)
                  (+restore-desktop))))
4 个赞

哦,这是陈斌称呼这个人为大师的,我同意他的称呼。他们都没自称大师,是我这样擅自这么称呼的,出于尊敬。

这个方法和 purcell 的做法效果差不多,谢谢。

嗯,虽说直接抄的效率高,我个人也倾向于直接使用别人的配置,但是我发现自己有别的各种需求,等不到别人来实现了,所以我就打算多学习一下 elisp ,来达到自己的使用目的。

刚好昨天整理了一下 desktop 相关的配置,供 lz 参考:

(use-package desktop
  :commands restart-emacs-without-desktop
  :init (desktop-save-mode)
  :config
  ;; inhibit no-loaded prompt
  (setq desktop-file-modtime (file-attribute-modification-time
                              (file-attributes
                               (desktop-full-file-name)))
        desktop-lazy-verbose nil
        desktop-load-locked-desktop t
        desktop-restore-eager 1
        desktop-restore-frames nil
        desktop-save t)

  (defun restart-emacs-without-desktop (&optional args)
    "Restart emacs without desktop."
    (interactive)
    (restart-emacs (cons "--no-desktop" args))))
7 个赞

哦,谢谢!我最近很少逛论坛,最近翻邮箱才看到。

:+1: desktop 已经可以实现恢复上次打开的文件。但我看Purcell 还在用session.el 这个很老的包。
请问下这个session.el 是恢复什么的?看官网介绍感觉和Desktop 功能重复了。

感觉 desktop 存的东西多点,然后 session 存的东西也可以通过 desktop-globals-to-save 或者 savehist(据说有性能或者内存泄漏问题)存,我看 Purcell 也用了,所以我也不太懂为啥他还在用 session。

这样的话,确实没必要用 session 这个包了,拖慢Emcas启动。
Mac 和 Linux 上恢复desktop 很快,但是 Windows下 恢复的很慢很慢。