使用 emacs 守护进程模式时,如何在 GUI emacs 框架中显示 Emacs 菜单,但不在 tty 框架中显示

使用 emacs 守护进程模式时,如何在 GUI emacs 框架中显示 Emacs 菜单,但不在 tty 框架中显示

我启动一个 emacs 守护进程,从长期 GUI emacs 框架和短期 tty emacs 框架连接到该守护进程。我目前在 .emacs.d/init.el 中使用以下内容:

(if (not window-system) (menu-bar-mode 0))

不幸的是,这是一个全局设置,因此它适用于所有框架。我更希望只在我的 GUI 框架上显示菜单;菜单在 tty 框架上占用了太多空间。

有没有办法使这个设置框架特定?

谢谢。

答案1

该设置是特定于帧的:每个帧都有一个menu-bar-lines参数。实际上menu-bar-mode循环遍历所有帧来设置此参数。要为当前帧设置参数:

(set-frame-parameter (selected-frame) 'menu-bar-lines 1) ; or 0 for off

下一步是每次创建帧时设置参数:

(defun set-frame-menu-bar-lines (frame)
  (let ((want-menu (memq (framep frame) '(x w32 ns))))
    (set-frame-parameter frame 'menu-bar-lines (if want-menu 1 0))))
(add-hook 'after-make-frame-functions 'set-frame-menu-bar-lines)

相关内容