Wie verwende ich, während ich keine Eingabe mache?


11

Aus der Dokumentationszeichenfolge:

Führen Sie BODY nur aus, solange keine Eingabe ansteht.
Wenn eine Eingabe eintrifft, wird die Ausführung von BODY beendet und while-no-inputt zurückgegeben. Wenn Sie aufhören, wird Null zurückgegeben. Wenn BODY beendet ist, while-no-inputwird der von BODY erzeugte Wert zurückgegeben.

Wenn ich das richtig verstehe, kann ich mit diesem Makro eine umfangreiche Berechnung durchführen (versuchen), ohne die Schnittstelle aufzuhängen. Das ist sicherlich ein Konzept, das ich attraktiv finde, aber ich frage mich, wann das in der Praxis nützlich ist.

Es scheint, dass die Berechnung jederzeit unterbrochen werden kann, ohne Informationen darüber, wo dies geschehen ist, und ohne einfache Möglichkeit, sie später wieder aufzunehmen. Was mich denken lässt, dass es vielleicht doch nicht so nützlich ist ...

  • Gibt es eine empfohlene Verwendung des while-no-inputMakros?
  • Gibt es ein Beispiel für die Verwendung dieses Makros in freier Wildbahn?

1
Sieht aus wie icomplete +, ivy, helm sind nur einige der Pakete, die es verwenden.
Kaushal Modi

Antworten:


10

In der Tat gibt es keine Unterstützung für die Wiederaufnahme. Natürlich kann der Körper von while-no-inputregelmäßig "Checkpoints" durchführen, um zu wissen, wo er das nächste Mal anfangen soll.

Die ursprüngliche Motivation für diese Funktionalität war jedoch in Fällen, in denen die berechneten Informationen nach dem nächsten Befehl wahrscheinlich unbrauchbar sind. Insbesondere wurde es für eingeführt icomplete, damit die Berechnung des Satzes von Abschlusskandidaten den Benutzer nicht daran hindert, weiteren Text einzugeben (was wiederum ohnehin eine Neuberechnung dieses Satzes von Abschlusskandidaten erfordert).


4

Es ist sehr nützlich in Counsel-Git-Grep : Ich kann nach jedem Tastendruck git grepdie gesamten 3.800.000 Zeilen des Emacs-Git-Repositorys aufrufen . Keine Probleme. Und es ist in Ordnung, unterbrochen zu werden, das müssen Sie nur überprüfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.