Jak korzystać z while-no-input?

11

Z dokumentacji:

Wykonuj BODY tylko tak długo, jak długo nie ma żadnych danych wejściowych.
Jeśli nadejdzie wejście, to kończy działanie BODY i while-no-inputzwraca t. Rezygnacja powoduje, że zwraca zero. Jeśli BODY zakończy się, while-no-inputzwraca dowolną wartość wyprodukowaną przez BODY.

Jeśli dobrze rozumiem, to makro pozwala mi (próbować) wykonać ciężkie obliczenia bez zawieszania interfejsu. Jest to z pewnością koncepcja, która wydaje mi się atrakcyjna, ale zastanawiam się, kiedy jest to przydatne w praktyce.

Wydaje się, że obliczenia można przerwać w dowolnym momencie, bez informacji o tym, gdzie to się stało, i nie ma łatwego sposobu na wznowienie go później. Co sprawia, że ​​myślę, że może nie być aż tak przydatne ...

  • Czy istnieje zalecany sposób korzystania z while-no-inputmakra?
  • Czy istnieją jakieś przykładowe zastosowania tego makra na wolności?
Malabarba
źródło
1
Wygląda na to, że icomplete +, ivy, helm to kilka pakietów, które go używają.
Kaushal Modi

Odpowiedzi:

10

Rzeczywiście nie ma wsparcia dla wznowienia. Oczywiście ciało while-no-inputmoże wykonywać regularne „punkty kontrolne”, aby wiedzieć, od czego zacząć następnym razem.

Ale pierwotną motywacją dla tej funkcjonalności były przypadki, w których obliczone informacje są prawdopodobnie bezużyteczne po następnym poleceniu. Mówiąc dokładniej, został wprowadzony icomplete, aby obliczenia zestawu kandydatów na ukończenie nie uniemożliwiały użytkownikowi wpisania dodatkowego tekstu (co z kolei i tak wymaga ponownego obliczenia tego zestawu kandydatów na zakończenie).

Stefan
źródło
4

Jest to bardzo przydatne w counsel-git-grep : jestem w stanie wywołać git grepcałe 3 800 000 linii repozytorium git Emacsa po każdym naciśnięciu klawisza. Bez zawieszania się. I przerwanie jest w porządku, wystarczy to sprawdzić.

abo-abo
źródło