Emacs可以使用哪些备用会话管理器?

时间:2009-05-11 12:52:29

标签: session emacs

我已阅读the page in Emacs wiki,其中包含会话管理器插件列表。但在尝试了所有这些之后,我仍然不满意他们中的任何一个。

相比之下,the VIM session manager按名称保存和加载会话,这对我来说是最重要的功能之一。

特别是,我想要一个Emacs的会话管理器:

  • 按名称管理会话
  • 保存标签,屏幕,框架等..

我正在尝试使用Emacs,因为它具有非常好的功能,但是一个好的会话管理器对我的工作流程非常重要。


相关:

5 个答案:

答案 0 :(得分:34)

由于您不喜欢desktop.el的基本功能,因此请在其周围添加一些elisp:

(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))

修改

获得一些投票,所以添加完成阅读和历史等细节

答案 1 :(得分:4)

已经回答:

详细解释您的要求使我们能够为您提供更具体的解决方案。

修改

桌面模式允许您拥有多个会话 - 保存的桌面不是名称,而是基于目录。

从第Saving Emacs Sessions章开始:

  

您可以保存当前桌面和   重新加载另一个目录中保存的一个   输入M-x desktop-change-dir.

此外,desktop-path变量允许您定义目录列表以搜索已保存的桌面。

修改2

Elisp code snippet sent by scottfrazer允许您为会话命名,因为它在背景中将名称转换为桌面模式的正确目录名称。

答案 2 :(得分:2)

对于存储/恢​​复问题部分的缓冲区/标签:我使用elscreen,我管理存储/恢复桌面会话的方式和elscreen选项卡配置是我的.emacs中的以下代码文件(使用的名称是不言自明的,如果每次emacs启动时都不应执行存储/恢复功能,只需注释掉“(##elscreen-store kill-emacs-hook)”和“(elscreen-)恢复)“):

(defvar emacs-configuration-directory
    "~/.emacs.d/"
    "The directory where the emacs configuration files are stored.")

(defvar elscreen-tab-configuration-store-filename
    (concat emacs-configuration-directory ".elscreen")
    "The file where the elscreen tab configuration is stored.")

(defun elscreen-store ()
    "Store the elscreen tab configuration."
    (interactive)
    (if (desktop-save emacs-configuration-directory)
        (with-temp-file elscreen-tab-configuration-store-filename
            (insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
    "Restore the elscreen tab configuration."
    (interactive)
    (if (eq (type-of (desktop-read)) 'symbol)
        (let ((screens (reverse
                        (read
                         (with-temp-buffer
                          (insert-file-contents elscreen-tab-configuration-store-filename)
                          (buffer-string))))))
            (while screens
                (setq screen (car (car screens)))
                (setq buffers (split-string (cdr (car screens)) ":"))
                (if (eq screen 0)
                    (switch-to-buffer (car buffers))
                    (elscreen-find-and-goto-by-buffer (car buffers) t t))
                (while (cdr buffers)
                    (switch-to-buffer-other-window (car (cdr buffers)))
                    (setq buffers (cdr buffers)))
                (setq screens (cdr screens))))))
(elscreen-restore)

修改

我将elscreen-restore中的“if(desktop-read)”更改为“if(eq(type-of(desktop-read))”符号)“因为,如果emacs被杀死而不是被关闭通常的方式是,.emacs.desktop.lock文件不会被删除。因此,如果由于任何原因无法恢复桌面会话,“(桌面读取)”的返回值是一个“字符串”,解释错误,而不是“nil”,因此“if”不会因为它而失败应该。

答案 3 :(得分:1)

通过 书签 使用不同的桌面。简单,快速使用 - 点击键和presto,不同的桌面。如果你愿意,你甚至可以在它们之间循环。

  • 使用 C-x p K (默认情况下)设置desktop bookmark。系统会提示您输入桌面文件位置和要使用的书签名称。

  • 使用 C-x j K (默认情况下)跳转到已添加书签的桌面。系统将提示您输入书签名称(完成)。

您需要Bookmark+才能执行此操作。

答案 4 :(得分:0)

试用Emacs桌面。 Go here