Como usar while-no-input?

11

Da documentação:

Execute BODY apenas enquanto não houver entrada pendente.
Se a entrada chegar, isso encerra a execução de BODY e while-no-inputretorna t. Sair faz com que ele retorne nulo. Se BODY terminar, while-no-inputretornará 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-inputmacro?
  • Existe algum exemplo de uso dessa macro na natureza?
Malabarba
fonte
1
Parece que icomplete +, ivy, helm são alguns dos pacotes que o utilizam.
precisa saber é o seguinte

Respostas:

10

De fato, não há suporte para a retomada. Obviamente, o corpo while-no-inputpode 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).

Stefan
fonte
4

É super útil no conselho-git-grep : sou capaz de chamar git greptodas 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.

abo-abo
fonte