永久禁用Emacs中主模式的全局辅模式

永久禁用Emacs中主模式的全局辅模式,emacs,minor-mode,Emacs,Minor Mode,由于doc-view模式在启用linum模式时速度非常慢,因此我尝试在该模式下禁用它。同样的问题在近6年前得到了回答: 根据的回答,我已将以下内容放入我的文件中: 问题是我不能让它永久工作。当我启动一个新的缓冲区时,行号会重新出现在doc view mode的缓冲区中。请帮忙 您的问题是您自己的全球化次要模式正在调用全局linum次要模式,而不是缓冲区本地linum次要模式 您想这样做: (定义全局次要模式我的全局linum模式linum模式 (lambda() (当(非)(memq主模式 (

由于
doc-view模式
在启用
linum模式
时速度非常慢,因此我尝试在该模式下禁用它。同样的问题在近6年前得到了回答:

根据的回答,我已将以下内容放入我的文件中:


问题是我不能让它永久工作。当我启动一个新的缓冲区时,行号会重新出现在
doc view mode
的缓冲区中。请帮忙

您的问题是您自己的全球化次要模式正在调用全局linum次要模式,而不是缓冲区本地linum次要模式

您想这样做:

(定义全局次要模式我的全局linum模式linum模式
(lambda()
(当(非)(memq主模式
(列表“文档视图模式”外壳模式)))
(linum模式1)
(我的全球linum模式1)
我建议实际使用
derived-mode-p
进行
主模式
测试:

(定义全球化次要模式我的全局linum模式linum模式
(lambda()
(除非(或(小型缓冲区)
(派生模式-p“文档视图模式”外壳模式)
(linum模式1)
n、 b.
define globalized minor mode
define global minor mode
是一样的,但我更喜欢“globalized”命名,因为它更能说明它的用途(即,采用缓冲区本地次要模式,并创建一个控制该缓冲区本地模式的新全局次要模式——在多个缓冲区中总体启用或禁用该模式。“常规”全局次要模式不会以这种方式依赖于缓冲区本地次要模式,因此“全球化”术语有助于区分此类模式与其他全局模式)


n、 b.当您使用自定义的全球化次要模式时,您不需要任何
my inhibit global linum mode
代码。这是一种完全不同的方法,您可以将其从.emacs文件中删除。

非常有效。非常感谢您跨越近6年的回答!还有一件事:如何向li添加微型缓冲区例外情况之一?我不需要那里的行号?
(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))