emacsclient,在终端的框架中还原所有窗口

问题描述 投票:0回答:1

对象:在终端中,在一开始时,在一帧中,还原emacs工作区。即将所有“窗口”还原到C-x C-c之前的状态。

描述:通过将(desktop-save-mode 1)添加到init.el文件中,可以简单地在emacs GUI中完成窗口还原。

但是,当emacs作为守护程序运行时,emacsclient的执行方式不同。使用相同的设置,它仍会记住文件的主要模式以及退出前的其他缓冲区,但是window layout将不会恢复。根据默认设置,仅显示一个主窗口。

我做了一些研究,并使用elisp内置文档研究了一些函数/变量。我检查了(desktop-save-buffer 1)framset-saveframset-restore,但它们似乎都不起作用。我也检查了以前发布的类似问题,并使用以下脚本找到了某人的答案:

 (setq desktop-restore-forces-onscreen nil)
    (add-hook 'desktop-after-read-hook
     (lambda ()
       (frameset-restore
        desktop-saved-frameset
        :reuse-frames (eq desktop-restore-reuses-frames t)
        :cleanup-frames (not (eq desktop-restore-reuses-frames 'keep))
        :force-display desktop-restore-in-current-display
        :force-onscreen desktop-restore-forces-onscreen)))

但是此脚本有错误,它会打开一个“ GUI”框架,并且无法正确关闭(关闭时会自动重新打开,如果可能的话,我更喜欢在终端中打开该框架,因此终端的“ texteditor”设置为possibe,还有其他一些小优点)。很抱歉,这个单调的问题,我们将不胜感激。

terminal emacs window frame
1个回答
0
投票

我真的不知道执行此操作的正确方法,但是我能够将在GUI框架中创建的框架集还原为终端框架。新框架必须足够大,否则将引发错误。我做了(setq foo (frameset-save (frame-list)))(pp foo (get-buffer "*scratch*"))将帧集的read able表示转储到*scratch*缓冲区。然后,我手动编辑它以摆脱(display . ":0.0")。这似乎足以使其不强制使用GUI框架。然后我在编辑的框架集上进行了(frameset-restore [frameset ...])

[如果您查看frameset.el,则具有过滤功能以编程方式编辑框架集。另外,如果您查看注释,则会特别对待display参数。您应该查看那里的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.