Como posso ter um comando 'verdadeiramente' interativo no emacs?

1

Como eu implementaria uma função bare bones que "reavalia" com cada tecla pressionada? Quero dizer chave-prima vagamente; Estou procurando emular o comportamento de isearch e amigos.

Eu estaria usando isso para testar interativamente expressões XPath em um buffer de modo nxml aberto usando algo ao longo das linhas de redução de buffer. Para os propósitos desta questão, apenas uma função que chama message em qualquer coisa que esteja no minibuffer seria absolutamente grande.

    
por Sean Allred 29.07.2014 / 04:09

1 resposta

1

Dependendo do que você quer, você pode trapacear e usar isearch-mode : seu terceiro argumento ( OP-FUN ) é uma função chamada depois que cada entrada é processada, e seu quinto argumento ( WORD ) pode ser qualquer função que irá transformar a string digitada em isearch em um regexp para procurar no buffer.

Para 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))

se você digitar "foo" ele irá procurar por uma palavra que comece com "foo", você digita "foo: bar" ele irá procurar pela palavra "foo" seguido por algum outro caractere depois "bar" como o início de uma palavra.

Algum domínio de expressões regulares pode ser necessário para que isso funcione para você.

Você também pode ver a origem da pesquisa para ver como isso é feito.

    
por 29.07.2014 / 11:46