2017-01-30 12 views
2

doc-view-modeは非常に遅く、有効にされているのはlinum-modeです。このモードでは無効にしようとしています。同じ質問は、ほぼ6年前に回答されています 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

あなたの問題は、独自のグローバル化のマイナーモードではなくバッファローカルアママイナーモードのグローバルアママイナーモードを起動していることです!

あなたはこれをやってみたかった:

(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と同じものですが、バッファローカルマイナーモードを使用し、が制御する新しいグローバルマイナーモードを作成するためには、それが何であるかを示すために「グローバリゼーション」ネーミングを使用することをお勧めします。 buffer-ローカルモードでは、多くのバッファで有効にしたり無効にしたりすることができます。「通常の」グローバルマイナーモードは、このようにバッファローカルマイナーモードに依存しないため、「グローバル化」という用語は、他のグローバルモードからのモード)。

n.b.カスタマイズされたグローバル化マイナーモードを使用しているので、my-inhibit-global-linum-modeコードは必要ありません。これはまったく異なるアプローチで、.emacsファイルから削除することができます。

+0

チャームのように働いた。おかげさまで6年ぐらいのあなたの答えをありがとう! –

+0

もう1つ:例外のリストにミニバッファを追加する方法は?そこに行番号は必要ありませんか? –

+0

(1)歓迎です:)(2)コードはそれに応じて更新されました。 – phils

関連する問題