Da documentação:
Execute BODY apenas enquanto não houver entrada pendente.
Se a entrada chegar, isso encerra a execução de BODY ewhile-no-input
retorna t. Sair faz com que ele retorne nulo. Se BODY terminar,while-no-input
retornará qualquer valor que BODY produziu.
Se bem entendi, essa macro permite (tentar) executar uma computação pesada sem interromper a interface. Certamente esse é um conceito que eu acho atraente, mas fico me perguntando quando isso é útil na prática.
Parece que o cálculo pode ser interrompido a qualquer momento, sem informações sobre onde isso aconteceu e nenhuma maneira fácil de retomar depois. O que me faz pensar que pode não ser tão útil, afinal ...
- Existe uma maneira recomendada de usar a
while-no-input
macro? - Existe algum exemplo de uso dessa macro na natureza?
elisp
elisp-macros
Malabarba
fonte
fonte
Respostas:
De fato, não há suporte para a retomada. Obviamente, o corpo
while-no-input
pode fazer "checkpoints" regulares para saber por onde começar da próxima vez.Mas a motivação original para essa funcionalidade estava nos casos em que as informações computadas provavelmente são inúteis após o próximo comando. Mais especificamente, foi introduzido para
icomplete
, para que o cálculo do conjunto de candidatos à conclusão não impeça o usuário de digitar mais texto (o que, por sua vez, exige recomputação desse conjunto de candidatos à conclusão).fonte
É super útil no conselho-git-grep : sou capaz de chamar
git grep
todas as 3.800.000 linhas do repositório git do Emacs após cada toque de tecla. Sem problemas. E não há problema em ser interrompido, basta verificar isso.fonte