Как использовать пока нет ввода?

11

Из строки документации:

Выполняйте BODY только до тех пор, пока нет ожидающих ввода.
Если поступает ввод, это завершает выполнение BODY и while-no-inputвозвращает t. Выход заставляет его возвращать ноль. Если BODY завершает работу, while-no-inputвозвращает любое значение, произведенное BODY.

Если я правильно понимаю, этот макрос позволяет мне (пытаться) выполнять тяжелые вычисления без зависания интерфейса. Это, безусловно, концепция, которая мне кажется привлекательной, но мне остается только задуматься, когда это полезно на практике.

Кажется, что вычисления могут быть прерваны в любой момент, без информации о том, где это произошло, и нет простого способа возобновить его позже. Что заставляет меня думать, что это может быть не очень полезно в конце концов ...

  • Есть ли рекомендуемый способ использования while-no-inputмакроса?
  • Есть ли примеры использования этого макроса в дикой природе?
Malabarba
источник
1
Похоже, icomplete +, ivy, helm - это несколько пакетов, использующих его.
Каушал Моди

Ответы:

10

Действительно, нет поддержки возобновлению. Конечно, тело while-no-inputможет делать регулярные «контрольные точки», чтобы знать, с чего начать в следующий раз.

Но первоначальная мотивация для этой функциональности была в тех случаях, когда вычисленная информация, вероятно, бесполезна после следующей команды. Более конкретно, оно было введено для того icomplete, чтобы вычисление набора кандидатов на завершение не препятствовало тому, чтобы пользователь печатал дополнительный текст (что, в свою очередь, в любом случае требует повторного вычисления этого набора кандидатов на завершение).

Стефан
источник
4

Это очень полезно в counsel-git-grep : я могу вызывать git grepцелые 3 800 000 строк репозитория Emacs git после каждого нажатия клавиши. Никаких зависаний. И это нормально, если тебя прерывают, тебе просто нужно это проверить.

Або-або
источник