Определить новую функцию для выхода из клавиатуры и очистки выделения
Я довольно новичок в elisp, и я пытался определить функцию для настройки поведения подсветки при поиске. Цель: после i-search
Я хочу иметь возможность очистить выделение C-g
, но я хочу, чтобы выделение осталось, если я нажму клавишу ввода.
Итак, я определил функцию в моем init.el
как:
(defun keyboard-quit-cleanup ()
"clean up highligh after keyboard quit"
(keyboard-quit)
(lazy-highlight-cleanup))
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
однако, это не работает. Что здесь не так?
Спасибо!
1 ответ
Боюсь, много вещей:)
Ваш
global-set-key
сломано:(global-set-key (kbd "C-g") 'keyboard-quit-cleanup)
не:
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
(где ты это увидел??)
Ваша пользовательская функция не является интерактивной командой, поэтому вы не можете привязать ее к клавише. Это должно быть:
(defun keyboard-quit-cleanup () "Clean up highlights after keyboard quit." (interactive) ...)
Вы, вероятно, хотите использовать
FORCE
аргументlazy-highlight-cleanup
Вы связываете не ту вещь.
Cg связан с
isearch-abort
вisearch-mode-map
раскладка.(Отредактируйте: и в соответствии с комментарием tripleee, возиться с глобальной привязкой, безусловно, плохая идея. С ней определенно связано определенное поведение, и вы не хотите рисковать ее нарушением.)
Поскольку вы хотите добавить дополнительное поведение к стандартному поведению, вы, вероятно, захотите использовать ловушку (по предпочтению) или какой-то совет. В этом случае есть удобный крючок, который мы можем использовать.
Смотри Chv
isearch-mode-end-hook
RET(add-hook 'isearch-mode-end-hook 'my-isearch-end) (defun my-isearch-end () "Custom behaviours for `isearch-mode-end-hook'." (when isearch-mode-end-hook-quit (lazy-highlight-cleanup t)))
(Я полагаю, у вас есть lazy-highlight-cleanup
установлен в nil
обычно, в противном случае очистка происходит по умолчанию.)