автоматически отключать глобальный второстепенный режим для определенного основного режима

Я активировал режим с центрированным курсором глобально, например:

(require 'centered-cursor-mode)
(global-centered-cursor-mode 1)

Он работает нормально, но есть несколько основных режимов, в которых я хотел бы отключить его автоматически. Например слизь-репл и ракушка.

Есть еще один вопрос, связанный с той же проблемой, но с другим второстепенным режимом. К сожалению, ответы предлагают только обходные пути для этого конкретного второстепенного режима (global-smart-tab-mode), который не работает с режимом с центрированным курсором.

Я пробовал этот крючок, но он не действует. Переменная не меняется.

(eval-after-load "slime"
  (progn
    (add-hook 'slime-repl-mode-hook (lambda ()
                                      (set (make-local-variable 'centered-cursor-mode) nil)))
    (slime-setup '(slime-repl slime-autodoc))))

person chrm    schedule 26.07.2011    source источник


Ответы (1)


Я сделал новый глобальный второстепенный режим, который не активируется в некоторых режимах. Лямбда - это функция, которая вызывается в каждом новом буфере для активации второстепенного режима. Это подходящее место для исключений.

(require 'centered-cursor-mode)

(define-global-minor-mode my-global-centered-cursor-mode centered-cursor-mode
  (lambda ()
    (when (not (memq major-mode
                     (list 'slime-repl-mode 'shell-mode)))
      (centered-cursor-mode))))

(my-global-centered-cursor-mode 1)

Он должен работать для любого другого глобального второстепенного режима. Просто скопируйте определение global-xxx-mode и сделайте правильные исключения.

person chrm    schedule 27.07.2011
comment
Кажется, не работает, когда вы переключаетесь с одного основного режима на другой - person xuhdev; 28.04.2015