Определить новую функцию для выхода из клавиатуры и очистки выделения

Я довольно новичок в 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 ответ

Решение

Боюсь, много вещей:)

  1. Ваш global-set-key сломано:

    (global-set-key (kbd "C-g") 'keyboard-quit-cleanup)
    

    не:

    (global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
    

    (где ты это увидел??)

  2. Ваша пользовательская функция не является интерактивной командой, поэтому вы не можете привязать ее к клавише. Это должно быть:

    (defun keyboard-quit-cleanup ()
      "Clean up highlights after keyboard quit."
      (interactive)
      ...)
    
  3. Вы, вероятно, хотите использовать FORCE аргумент lazy-highlight-cleanup

  4. Вы связываете не ту вещь.

    Cg связан с isearch-abort в isearch-mode-map раскладка.

    (Отредактируйте: и в соответствии с комментарием tripleee, возиться с глобальной привязкой, безусловно, плохая идея. С ней определенно связано определенное поведение, и вы не хотите рисковать ее нарушением.)

  5. Поскольку вы хотите добавить дополнительное поведение к стандартному поведению, вы, вероятно, захотите использовать ловушку (по предпочтению) или какой-то совет. В этом случае есть удобный крючок, который мы можем использовать.

    Смотри 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 обычно, в противном случае очистка происходит по умолчанию.)

Другие вопросы по тегам