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 iwhile-no-input
zwraca t. Rezygnacja powoduje, że zwraca zero. Jeśli BODY zakończy się,while-no-input
zwraca 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-input
makra? - Czy istnieją jakieś przykładowe zastosowania tego makra na wolności?
elisp
elisp-macros
Malabarba
źródło
źródło
Odpowiedzi:
Rzeczywiście nie ma wsparcia dla wznowienia. Oczywiście ciało
while-no-input
moż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).źródło
Jest to bardzo przydatne w counsel-git-grep : jestem w stanie wywołać
git grep
cał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ć.źródło