¿Cómo usar while-no-input?

11

Desde la cadena de documentación:

Ejecute BODY solo mientras no haya ninguna entrada pendiente.
Si llega la entrada, eso finaliza la ejecución de BODY y while-no-inputdevuelve t. Dejar de fumar hace que regrese cero. Si BODY termina, while-no-inputdevuelve cualquier valor que BODY haya producido.

Si entiendo correctamente, esta macro me permite (intentar) realizar un cálculo pesado sin colgar la interfaz. Ese es ciertamente un concepto que me parece atractivo, pero me pregunto cuándo es tan útil en la práctica.

Parece que el cálculo se puede interrumpir en cualquier momento, sin información sobre dónde sucedió eso, y no hay una manera fácil de reanudarlo más tarde. Lo que me hace pensar que podría no ser tan útil después de todo ...

  • ¿Hay alguna forma recomendada de usar la while-no-inputmacro?
  • ¿Hay algún ejemplo de uso de esta macro en la naturaleza?
Malabarba
fuente
1
Parece que icomplete +, ivy, helm son algunos de los paquetes que lo usan.
Kaushal Modi

Respuestas:

10

De hecho, no hay apoyo para la reanudación. Por supuesto, el cuerpo de while-no-inputpuede hacer "puntos de control" regulares para saber por dónde empezar la próxima vez.

Pero la motivación original para esta funcionalidad fue en los casos en que la información calculada es probablemente inútil después del siguiente comando. Más específicamente, se introdujo para icompleteque el cálculo del conjunto de candidatos de finalización no impida que el usuario escriba más texto (lo que a su vez requiere la recalculación de ese conjunto de candidatos de finalización de todos modos).

Stefan
fuente
4

Es súper útil en Counsel-git-grep : puedo llamar git grepa las 3,800,000 líneas completas del repositorio git de Emacs después de cada pulsación de tecla. Sin complejos. Y está bien que te interrumpan, solo debes verificar eso.

abo-abo
fuente