我有emacs设置在login(emacs --daemon)上作为守护进程启动.在编辑文件时,我要么启动图形客户端(emacsclient),要么当我在终端中工作时,我使用终端客户端(emacsclient -t).
我想在图形客户端中启用菜单栏,但我不想在终端客户端中使用它,因为我不喜欢它在终端中的行为.
菜单栏可以通过启用/禁用menu-bar-mode,但它的行为与帮助说的一样:
此命令适用于所有存在的帧和将来要创建的帧.
这意味着,当我运行图形客户端并启动终端客户端时,终端客户端会显示菜单栏,当我禁用它时,它也会在图形客户端中被禁用.
如何专门隐藏菜单栏?菜单栏是否有框架本地设置?
如果在图形显示器上,您可以将frame参数设置为menu-bar-lines1,如果在终端中,则将其设置为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)))
Run Code Online (Sandbox Code Playgroud)
你可以(add-hook 'after-make-frame-functions 'contextual-menubar)让它自动化.根据这个线程,after-make-frame-functions不会为初始帧运行,因此您可能还需要将其添加到初始帧中after-init-hook.