关于session的管理

vim中我一直使用vim-session来管理我的项目session,主要来创建项目session,切换,切换前/关闭前当前session的最新状态(比如几个split,当前光标在那个split内的哪个位置)。目前我使用的是stackoverflow上找到的一段代码,但是目前有如下几个问题:

  • 读取项目session是使用列出目录下文件的方式,因此会有., ..这两个文件夹指向符号需要去掉。

  • 关闭emacs和切换session前并不会自动保存最新的状态,下次载入还是最后一次手动运行save的状态。

  • 切换是会提示desktop file已经被使用的问题。

希望有人能帮解决下,或者提供一个更好的方案。 谢啦:)

1 个赞

相关代码

;; session manager
;; http://stackoverflow.com/a/849180/2326199
(defvar my-desktop-session-dir
  (concat (getenv "HOME") "/.emacs.d/desktop-sessions/")
  "*Directory to save desktop sessions in")

(defvar my-desktop-session-name-hist nil
  "Desktop session name history")

(defun my-desktop-save (&optional name)
  "Save desktop with a name."
  (interactive)
  (unless name
    (setq name (my-desktop-get-session-name "Save session as: ")))
  (make-directory (concat my-desktop-session-dir name) t)
  (desktop-save (concat my-desktop-session-dir name) t))

(defun my-desktop-read (&optional name)
  "Read desktop with a name."
  (interactive)
  (unless name
    (setq name (my-desktop-get-session-name "Load session: ")))
  (desktop-read (concat my-desktop-session-dir name)))

(defun my-desktop-get-session-name (prompt)
  (completing-read prompt (and (file-exists-p my-desktop-session-dir)
			       (directory-files my-desktop-session-dir))
		   nil nil nil my-desktop-session-name-hist))

(evil-leader/set-key "m s" 'my-desktop-save)
(evil-leader/set-key "l s" 'my-desktop-read)

直接用 desktop-save-mode 有什么问题吗?Emacs 手册里有介绍 (emacs) Saving Emacs Sessions

stackoverflow的这份代码就是使用的desktop-save, 只是他加入了存取多个desktop而不是只能存取上一个。然后碰到的问题在开头已经列出来了三个了。

你的这份文档我去看了,从文档看只能保存一份desktop,即last desktop