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

1

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

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

Шон Оллред
источник
Как насчет ?: (add-hook 'post-command-hook (lambda () (message "hello-world")))и добавьте a tк хвостовой части, чтобы сделать его локальным по буферу, и еще один, tесли вы хотите добавить его к существующим функциям, уже назначенным этому хуку (вместо предварительного ожидания).
юрист
Вот ссылка на странное животное, которое может быть специально адаптировано, но не обязательно масштабируемо для использования другими людьми - это больше внутренняя работа: stackoverflow.com/questions/23441478/… Это post-command-hookуниверсально, но запускает иногда слишком часто для моих личных нужд.
юрист

Ответы:

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

Рэй
источник