Session 哪些备用会话管理器可用于Emacs?

Session 哪些备用会话管理器可用于Emacs?,session,emacs,Session,Emacs,我已经阅读了其中包含会话管理器插件的列表。但在尝试了所有这些之后,我仍然对其中任何一个都不满意 相比之下,按名称保存和加载会话,这是我最重要的功能之一 特别是,我需要一个用于Emacs的会话管理器: 按名称管理会话 保存选项卡、屏幕、框架等 我尝试使用Emacs,因为它有非常好的特性,但是一个好的会话管理器对我的工作流程很重要 相关的: 试试Emacs桌面。 已回答: 详细解释您的需求可以让我们为您提供更具体的解决方案 编辑 桌面模式允许您保存多个会话桌面不是名称而是基于目录

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

相比之下,按名称保存和加载会话,这是我最重要的功能之一

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

  • 按名称管理会话
  • 保存选项卡、屏幕、框架等
我尝试使用Emacs,因为它有非常好的特性,但是一个好的会话管理器对我的工作流程很重要


相关的:

试试Emacs桌面。

已回答:

详细解释您的需求可以让我们为您提供更具体的解决方案

编辑

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

从第章:

您可以保存当前桌面和 重新加载保存在另一个目录中的文件 通过键入
M-x桌面更改目录。

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

编辑2


允许您命名会话,因为在后台,它会将名称转换为桌面模式的正确目录名。

由于您不喜欢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))
编辑


获得一些选票,因此添加一些细节,如完成阅读和历史记录等

通过为不同的桌面添加书签来使用它们。简单,快速使用--点击一个键,然后进入不同的桌面。如果你愿意,你甚至可以在它们之间骑自行车

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

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


您需要这样做。

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

编辑


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

如果您可以列出您尝试过的和不喜欢的错误,这会有所帮助。+1 Nifle,并且您应该在“emacs wiki中的页面”上包含一个链接所以你的读者可以看到你在说什么。链接到合适的VIM文档会有助于我。好吧。我尝试清理这个问题。问题是,HeavalaNoVo,你要求人们帮助你,所以你可以考虑多做一些工作,让他们很容易做到这一点……布瑞恩:该死。我吸了。谢谢。我已经试过桌面了。op.el(我说过4次),它不支持按名称保存会话。你说你在哪里使用了desktop.el?“我尝试了wiki中编写的所有用于emacs的sessionmanager插件,但我发现其中最有用的插件不保存帧,不使用会话名称,而且所有插件的名称都非常糟糕。”我已经尝试了desktop.el(我说过4次),它不支持按名称保存会话。@Török Gábor:他声称尝试了其中的选择列表,并要求提供一个非常特殊的功能。问题的表述是边缘化的,语气是被动的攻击性的,但问题似乎是独特的。@Dmcke:是的,对我答案的评论澄清了这一点,这就是我为什么尝试这么做的原因然后指出,Emacs Desktop处理多个会话,它只是不按名称而按目录将它们分开。可能值得注意的是,
桌面路径
默认值在24.3中更改,导致与旧文档混淆。谢谢,我正在寻找类似的东西,这非常完美。这对于Emacs noob li来说非常棒像我一样。@Ibrahim:更新以使事情变得更美好RGENIUS解决方案,有什么事情你不能用一点elisp吗?;pI无法检索窗口配置。此lisp代码支持它吗。这正是我要找的。谢谢:)
(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)