Como eu implementaria umossos nusfunção que 'reavalia' a cada pressionamento de tecla? Quero dizer, pressionar a tecla livremente; Estou procurando imitar o comportamento de isearch
amigos.
Eu usaria isso para testar interativamente expressões XPath em um buffer de modo nxml aberto usando algo parecido com estreitamento de buffer. Porém, para os propósitos desta questão, apenas uma função que chama message
tudo o que está no minibuffer seria absolutamente grandiosa.
Responder1
Dependendo do que você quiser, você pode trapacear e usar isearch-mode
: seu terceiro argumento ( OP-FUN
) é uma função chamada após cada entrada ser processada, e seu 5º argumento ( WORD
) pode ser qualquer função que transforme a string digitada em isearch em uma regexp para procurar para no buffer.
Por exemplo:
(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))
se você digitar "foo" ele irá procurar por uma palavra começando com "foo", se você digitar "foo:bar" ele irá procurar pela palavra "foo" seguida por algum outro caractere e então "bar" como o início de uma palavra .
Pode ser necessário algum domínio de regexp para fazer isso funcionar para você.
Você também pode simplesmente olhar a fonte do isearch para ver como isso é feito.