【问题标题】:How can I hide the menu bar from a specific frame in emacs?如何在 emacs 的特定框架中隐藏菜单栏?
【发布时间】:2014-07-25 13:09:29
【问题描述】:

我已将 emacs 设置为在登录时作为守护程序启动 (emacs --daemon)。编辑文件时,我要么启动图形客户端 (emacsclient),要么在终端中工作时,使用终端客户端 (emacsclient -t)。

我想在图形客户端中启用菜单栏,但我不想在终端客户端中启用它,因为我不喜欢它在终端中的行为。

菜单栏可以通过menu-bar-mode启用/禁用,但它的行为如帮助所说:

此命令适用于所有存在的框架和将来要创建的框架。

这意味着,当我运行图形客户端并启动终端客户端时,终端客户端会显示菜单栏,当我禁用它时,它也会在图形客户端中被禁用。

如何专门从框架中隐藏菜单栏?菜单栏有框架本地设置吗?

【问题讨论】:

    标签: emacs


    【解决方案1】:

    您可以将menu-bar-linesframe parameter 在图形显示上设置为1,如果在终端上设置为0,则由(display-graphic-p) 检查:

    (defun contextual-menubar (&optional frame)
      "Display the menubar in FRAME (default: selected frame) if on a
    graphical display, but hide it if in terminal."
      (interactive)
      (set-frame-parameter frame 'menu-bar-lines (if (display-graphic-p frame) 1 0)))
    

    您可以(add-hook 'after-make-frame-functions 'contextual-menubar) 使其自动运行。根据this threadafter-make-frame-functions 不会在初始帧运行,因此您可能还需要将其添加到after-init-hook

    【讨论】:

    • 有效!谢谢你。您认为值得报告或要求制作mode-menu-bar frame-local 还是模式(如 menu-bar-mode 是)概念不允许这样做?它看起来更像是一种解决方法,只需删除菜单栏要绘制的区域。
    • 由你决定。实际上,如果您深入研究menu-bar-mode 的源代码,就会发现它基本上在做同样的(set-frame-parameter ...),只是在所有框架上,添加/删除菜单栏区域。代码本身很短,因此添加您正在考虑的功能可能并不难。
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2020-07-14
    • 2010-12-11
    • 1970-01-01
    • 2012-05-28
    • 2016-01-17
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多