Как я могу получить «действительно» интерактивную команду в 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, чтобы увидеть, как это делается.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.