Отключить выделение строки в визуальном режиме (злой режим)

Я новичок в emacs и хотел бы знать, как мы можем отключить режим выделения строки (global-hl-line-mode), когда мы находимся в ВИЗУАЛЬНОМ режиме Evil Mode. Меня действительно сбивает с толку, когда мы начинаем выбирать блок с активированной hl-линией, даже если их цвет фона отличается. Конечно, я хочу, чтобы hl-line-mode снова активировался, когда мы выходим из ВИЗУАЛЬНОГО режима. Спасибо.

РЕДАКТИРОВАТЬ: Я попробовал это, и я наконец смог отключить hl-line в ВИЗУАЛЬНОМ режиме.

(add-hook 'ловушка-вход-злой-визуальное-состояние (лямбда () (setq-local global-hl-line-mode nil)))

Но я не мог включить его, когда ухожу. Я пробовал это, но это не сработало:

(add-hook 'злой-визуальный-состояние-выход-крючок (лямбда () (global-hl-line-mode 1)))

РЕДАКТИРОВАТЬ: Nevermind, это действительно работает: (add-hook 'evil-visual-state-entry-hook (lambda () (setq-local global-hl-line-mode nil)))

(add-hook 'злой-визуальный-состояние-выход-крючок (лямбда () (global-hl-line-mode nil)))


person Walid Ber    schedule 12.11.2016    source источник


Ответы (1)


Возможно, лучше отключить hl-line-mode в текущем буфере, чем отключать его глобально:

(add-hook 'evil-visual-state-entry-hook (lambda() (hl-line-mode -1)))
(add-hook 'evil-visual-state-exit-hook (lambda() (hl-line-mode +1)))

Учтите, что это может быть проблемой, если вы не используете global-hl-line-mode. hl-line-mode будет включаться каждый раз, когда вы выходите из визуального режима, независимо от того, был ли изначально включен hl-line-mode. Вот что я взломал, чтобы предотвратить это:

(defvar-local was-hl-line-mode-on nil)
(defun hl-line-on-maybe ()  (if was-hl-line-mode-on (hl-line-mode +1)))
(defun hl-line-off-maybe () (if was-hl-line-mode-on (hl-line-mode -1)))
(add-hook 'hl-line-mode-hook 
  (lambda () (if hl-line-mode (setq was-hl-line-mode-on t)))))

(add-hook 'evil-visual-state-entry-hook 'hl-line-off-maybe)
(add-hook 'evil-visual-state-exit-hook 'hl-line-on-maybe)

Таким образом, hl-line-mode не будет изменен, если он не был явно активирован в буфере заранее, скажем, с помощью (add-hook 'python-mode-hook 'hl-line-mode).

РЕДАКТИРОВАТЬ: исправлен перехватчик hl-line-mode во втором фрагменте.

person Henrik L.    schedule 13.11.2016
comment
Спасибо @Henrik L. Вы правы. На самом деле я отключаю режим hl-line, когда открываю, например, ansi-term, поэтому я не хочу включать hl-line после выхода из визуального режима (я этого не заметил). Но приведенный выше фрагмент, похоже, не работает. Когда я вхожу в визуальный режим, линия hl все еще там ... - person Walid Ber; 13.11.2016
comment
@WalidBer Мое плохое! Во втором фрагменте была ошибка. Оператор if в хуке hl-line неправильно проверяет was-hl-line-mode-on вместо hl-line-mode. Я исправил это. Теперь он должен работать. - person Henrik L.; 14.11.2016