Как я могу получить "действительно" интерактивную команду в emacs?

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

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

1 ответ

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

Для 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, чтобы увидеть, как это делается.

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