2017-01-30 10 views
2

doc-view-mode이 매우 느리고 linum-mode이 활성화되어 있기 때문에, 해당 모드로 사용하지 않으려 고합니다. 같은 질문은 거의 육년 전에 대답했습니다 : automatically disable a global minor mode for a specific major modeEmacs에서 메이저 모드의 글로벌 마이너를 영구히 무효로합니다.

phils의 대답에 따라, 나는 내 .emacs 파일에 다음을 넣어 가지고 :

(define-global-minor-mode my-global-linum-mode global-linum-mode 
(lambda() 
    (when (not (memq major-mode 
        (list 'doc-view-mode 'shell-mode))) 
    (global-linum-mode)))) 
(my-global-linum-mode 1) 
(add-hook 'doc-view-mode-hook 'my-inhibit-global-linum-mode) 
(defun my-inhibit-global-linum-mode() 
    "Counter-act `global-linum-mode'." 
    (add-hook 'after-change-major-mode-hook 
      (lambda() (linum-mode 0)) 
      :append :local)) 

문제는 내가 그것을 를 작동 할 수 없다는 것입니다 영구적으로. 새 버퍼를 시작하면 줄 번호가 doc-view-mode의 버퍼에 다시 나타납니다. 도와주세요!

답변

1

귀하의 문제는 자신의 작은 세계화 모드 대신 버퍼 지역 LINUM 작은 모드의 글로벌 LINUM 사소한 모드를 호출하는 것입니다!

는이 작업을 수행하고 싶었 :

(define-global-minor-mode my-global-linum-mode linum-mode 
    (lambda() 
    (when (not (memq major-mode 
        (list 'doc-view-mode 'shell-mode))) 
     (linum-mode 1)))) 
(my-global-linum-mode 1) 
나는 당신의 major-mode 시험 derived-mode-p를 사용하여 실제로 제안

:

(define-globalized-minor-mode my-global-linum-mode linum-mode 
    (lambda() 
    (unless (or (minibufferp) 
       (derived-mode-p 'doc-view-mode 'shell-mode)) 
     (linum-mode 1)))) 

N.B. define-globalized-minor-modedefine-global-minor-mode과 동일하지만 버퍼 범용 마이너 모드를 사용하여 새로운 글로벌 마이너 모드를 만드는 것보다 약간 더 많은 것을 나타내는 것처럼 "글로벌화 된"이름 지정을 선호합니다. 컨트롤 버퍼 - 로컬 모드 - 많은 버퍼에서 활성화하거나 비활성화 할 수 있습니다. "일반"글로벌 마이너 모드는 버퍼 로컬 마이너 모드에 의존하지 않으므로 "글로벌화 된"용어는 이러한 종류의 다른 글로벌 모드의 모드).

n.b. 사용자 정의 글로벌 마이너 모드를 사용하고 있으므로 my-inhibit-global-linum-mode 코드가 필요하지 않습니다. 그것은 완전히 다른 접근 방식이었고 .emacs 파일에서 제거 할 수 있습니다.

+0

매력처럼 작동했습니다. 거의 6 년 동안 귀하의 답변을 주셔서 대단히 감사합니다! –

+0

한 가지 더 : 예외 목록에 미니 버퍼를 추가하는 방법은 무엇입니까? 거기에 줄 번호가 필요하지 않니? –

+0

(1) 환영합니다 :) (2) 코드가 그에 따라 업데이트되었습니다. – phils