Навсегда отключить глобальный минор для основного режима в Emacs
Поскольку doc-view-mode
очень медленно с включенным linum-mode
Я пытаюсь отключить его для этого режима. На тот же вопрос был дан ответ почти 6 лет назад: автоматически отключать глобальный второстепенный режим для определенного основного режима.
Следуя ответу 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)
Я бы предложил на самом деле использовать derived-mode-p
для тебя major-mode
тестовое задание:
(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))))
Н.Б. define-globalized-minor-mode
это то же самое, что define-global-minor-mode
, но я предпочитаю "глобализованное" именование, так как оно немного более показательно для чего оно предназначено (например, чтобы использовать дополнительный локальный буферный режим и создать новый глобальный вспомогательный режим, который управляет этим локальным буферным режимом - включение или отключение во многих буферах массово. "Обычный" глобальный минорный режим таким образом не будет зависеть от локально-буферного минорного режима, поэтому "глобализированная" терминология помогает отличить этот тип режима от других глобальных режимов).
nb Поскольку вы используете настраиваемый глобальный второстепенный режим, вам не нужно my-inhibit-global-linum-mode
код. Это был совершенно другой подход, и вы можете удалить его из файла.emacs.