2014-07-25 27 views
3

我有emacs安裝程序在登錄時作爲守護進程啓動(emacs --daemon)。在編輯文件時,我啓動圖形客戶端(emacsclient),或者當我在終端上工作時,使用終端客戶端(emacsclient -t)。如何隱藏emacs中特定幀的菜單欄?

我想在圖形客戶端中啓用菜單欄,但我不想讓它在終端客戶端中,因爲我不喜歡它在終端中的行爲。

菜單欄可以啓用/通過menu-bar-mode禁用,但它的行爲的幫助說:

該命令適用於存在和將來要創建幀的所有幀。

這意味着,當我運行圖形客戶端並啓動終端客戶端時,終端客戶端顯示菜單欄,當我禁用它時,它在圖形客戶端中也被禁用。

如何特別隱藏框架中的菜單欄?是否有菜單欄的框架本地設置?

回答

6

可以設置爲frame parametermenu-bar-lines爲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

+0

它的工作原理!謝謝。你認爲這是值得報告或要求使'mode-menu-bar' frame-local或不是模式(如菜單欄模式)概念允許這麼做嗎?它看起來更像是一種解決方法,只需刪除菜單欄的區域即可繪製。 –

+0

由您決定。實際上,如果你深入瞭解'menu-bar-mode'的源代碼,事實證明,它基本上是在所有幀上執行相同的'(set-frame-parameter ...)',以添加/刪除菜單欄的區域。代碼本身很短,所以添加你想要的功能可能並不困難。 – Dan