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


1

Como eu implementaria uma ossos desencapados função que 'reavalia' com cada tecla de pressionamento? Quero dizer chave-prima frouxamente; Eu estou olhando para imitar 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 tudo o que está no minibuffer seria absolutamente grandioso.


E se?: (add-hook 'post-command-hook (lambda () (message "hello-world"))) e adicione um t para o final da cauda para torná-lo local buffer e outro t se você quiser anexá-lo às funções existentes já atribuídas a esse gancho (em vez de serem pré-pendentes).
lawlist

Aqui está um link para um animal estranho que pode ser customizado, mas não necessariamente escalável para outras pessoas usarem - mais de um trabalho interno: stackoverflow.com/questions/23441478/… o post-command-hook é universal, mas dispara com muita frequência às vezes para minhas necessidades pessoais.
lawlist

Respostas:


1

Dependendo do que você quer, você pode trapacear e usar isearch-mode: seu terceiro argumento ( OP-FUN ) é uma função chamada após cada entrada ser 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 começa com "foo", você digita "foo: bar" ele irá procurar pela palavra "foo" seguido por algum outro char e então "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 simplesmente olhar para a fonte de isearch para ver como isso é feito.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.