¿Cómo implementaría unpuros huesos¿Función que 'reevalúa' con cada pulsación de tecla? Me refiero a presionar una tecla sin apretar; Estoy buscando emular el comportamiento de isearch
y amigos.
Usaría esto para probar interactivamente expresiones XPath contra un búfer en modo nxml abierto usando algo parecido a la reducción del búfer. Sin embargo, para los propósitos de esta pregunta, solo una función que llame message
a lo que sea que esté en el minibúfer sería absolutamente grandiosa.
Respuesta1
Dependiendo de lo que quieras, puedes hacer trampa y usar isearch-mode
: su tercer argumento ( OP-FUN
) es una función llamada después de que se procesa cada entrada, y su quinto argumento ( WORD
) puede ser cualquier función que transforme la cadena escrita en isearch en una expresión regular para buscar. para en el búfer.
Por ejemplo:
(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))
si escribe "foo", buscará una palabra que comience con "foo", si escribe "foo:bar", buscará la palabra "foo" seguida de algún otro carácter y luego "bar" como comienzo de una palabra. .
Es posible que sea necesario dominar algunas expresiones regulares para que esto funcione para usted.
También puedes consultar la fuente de isearch para ver cómo se hace.