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

215
Sean Allred

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

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

1
Как насчет ?: `(add-hook 'post-command-hook (lambda () (сообщение" hello-world ")))` и добавьте `t` к хвостовой части, чтобы сделать его буферным локальным, а другой` t `если вы хотите добавить его к существующим функциям, уже назначенным этому хуку (вместо предварительного ожидания). lawlist 10 лет назад 0
Вот ссылка на странное животное, которое может быть настроено по индивидуальному заказу, но не обязательно масштабируемо для использования другими людьми - это больше домашняя работа: http://stackoverflow.com/questions/23441478/emacs-creating- an-interactive-only-quasi-post-command-hook 'post-command-hook' универсален, но иногда запускается слишком часто для моих личных нужд. lawlist 10 лет назад 0

1 ответ на вопрос

1
Rémi

В зависимости от того, что вы хотите, вы можете обмануть и использовать 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, чтобы увидеть, как это делается.

Похожие вопросы