【问题标题】:emacsclient, restore all windows in a frame in terminalemacsclient,在终端中恢复一个框架中的所有窗口
【发布时间】:2020-03-10 03:36:59
【问题描述】:

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

说明:在 emacs GUI 中可以简单地通过在 init.el 文件中添加(desktop-save-mode 1) 来完成窗口恢复。

但是,当将 emacs 作为守护进程运行时,emacsclient 的执行方式不同。同样的设置,它仍然记得文件的主要模式,以及退出前的其他缓冲区,但不会恢复窗口布局。根据默认设置,仅显示 1 个主窗口。

我做了一些研究,使用 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”框架,并且无法正确关闭(关闭时自动重新打开,如果可能的话,我更喜欢在终端中打开框架,以便终端“文本编辑器”设置是可能的,还有其他一些小优点)。 很抱歉这个乏味的问题,任何帮助将不胜感激。

【问题讨论】:

    标签: terminal emacs window frame


    【解决方案1】:

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

    如果您查看frameset.el,就会发现有过滤功能可以以编程方式编辑框架集。此外,如果您查看 cmets,display 参数会被特殊处理。你应该看看那里的细节。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 2018-11-26
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2013-12-01
      • 1970-01-01
      相关资源
      最近更新 更多