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 ywhile-no-input
devuelve t. Dejar de fumar hace que regrese cero. Si BODY termina,while-no-input
devuelve 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-input
macro? - ¿Hay algún ejemplo de uso de esta macro en la naturaleza?
elisp
elisp-macros
Malabarba
fuente
fuente
Respuestas:
De hecho, no hay apoyo para la reanudación. Por supuesto, el cuerpo de
while-no-input
puede 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
icomplete
que 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).fuente
Es súper útil en Counsel-git-grep : puedo llamar
git grep
a 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.fuente