2014-07-25 2 views
3

로그인시 데몬으로 시작하도록 emacs 설정을했습니다 (emacs --daemon). 파일을 편집 할 때 그래픽 클라이언트 (emacsclient)를 실행하거나 터미널에서 작업 할 때 터미널 클라이언트 (emacsclient -t)를 사용합니다.어떻게 이맥스의 특정 프레임에서 메뉴 모음을 숨길 수 있습니까?

그래픽 클라이언트에서 메뉴 표시 줄을 활성화하고 싶지만 터미널 클라이언트의 동작이 좋지 않기 때문에 터미널 클라이언트에 표시하지 않을 것입니다.

메뉴 모음 menu-bar-mode를 통해 비활성화/활성화 될 수 있지만, 도움이 말한대로이 동작 :

이 명령은 존재하고 프레임이 미래에 생성 될 모든 프레임에 적용됩니다.

이것은 그래픽 클라이언트가 실행 중이고 터미널 클라이언트를 시작하면 터미널 클라이언트가 메뉴 표시 줄을 표시하고 비활성화하면 그래픽 클라이언트에서도 사용할 수 없음을 의미합니다.

프레임에서 메뉴 막대를 구체적으로 숨기려면 어떻게합니까? 메뉴 막대의 프레임 로컬 설정이 있습니까? (display-graphic-p)에 의해 확인으로

답변

6

당신은 단말기에서 그래픽 디스플레이에 menu-bar-lines 경우 1의 frame parameter을 설정하고 0 경우 수 있습니다

(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 thread에 따르면 after-make-frame-functions은 초기 프레임에 대해 실행되지 않으므로 after-init-hook에도 추가해야 할 수 있습니다.

+0

작동합니다! 고맙습니다. 보고 할 가치가 있다고 생각하거나 '모드 메뉴 막대'를 프레임 로컬로 만들 것인지 묻는 것이 좋습니까? 아니면 (메뉴 막대 모드와 같은) 개념이 허용하지 않습니까? 간단히 메뉴 막대가 그려지는 영역을 제거하여 해결 방법과 비슷해 보입니다. –

+0

당신에게 달려 있습니다. 사실,'menu-bar-mode'의 소스 코드를 파고 들자면 기본적으로 모든 프레임에 대해 같은'(set-frame-parameter ...) '을하고있는 것으로 밝혀졌습니다. 메뉴 막대의 영역. 코드 자체는 매우 짧기 때문에 생각하고있는 기능을 추가하는 것이 어렵지 않을 것입니다. – Dan

관련 문제