1

Как мне реализовать функцию « голых костей», которая «переоценивает» каждое нажатие клавиши? Я имею в виду нажатие клавиши свободно; Я хочу подражать поведению isearch и друзей.

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

1 ответ1

1

В зависимости от того, что вы хотите, вы можете обмануть и использовать isearch-mode: его третий аргумент (OP-FUN) является функцией, вызываемой после обработки каждого ввода, а его 5-й аргумент (WORD) может быть любой функцией, которая преобразует типизированную строку в поиске в регулярное выражение для поиска в буфере.

Для exemble:

(defun my-op-fun (string &optional lax)
  (let ((words (split-string string ":")))
    (mapconcat '(lambda (word) 
                  (concat "\\<" (regexp-quote word)))
               words "\\>.*")))

(defun my-isearch-beggining-of-line ()
  (interactive)
  (isearch-mode t t nil t 'my-op-fun))

если вы наберете "foo", он будет искать слово, начинающееся с "foo", при вводе «foo:bar» он будет искать слово "foo", за которым следует какой-то другой символ, а затем "bar" как начало слова ,

Может понадобиться некоторое мастерство регулярных выражений, чтобы сделать эту работу для вас.

Вы также можете просто посмотреть на источник isearch, чтобы увидеть, как это делается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .