21.14 Подавление взаимодействия

Иногда бывает полезно запустить Emacs как серверный процесс без графического интерфейса (headless server process), который реагирует на команды, переданные по сетевому соединению. Однако Emacs в первую очередь является платформой для интерактивного использования, поэтому многие команды запрашивают обратную связь у пользователя в определенных аномальных ситуациях. Это усложняет данный сценарий использования, поскольку серверный процесс просто зависнет в ожидании ввода пользователя.

Привязка переменной inhibit-interaction к значению, отличному от nil, заставляет Emacs сигнализировать об ошибке inhibited-interaction вместо того, чтобы запрашивать ввод, что затем может быть использовано серверным процессом для обработки этих ситуаций.

Вот типичный сценарий использования:

(let ((inhibit-interaction t))
  (respond-to-client
   (condition-case err
       (my-client-handling-function)
     (inhibited-interaction err))))

Если my-client-handling-function в конечном итоге вызывает что-либо, что запрашивает у пользователя что-либо (через y-or-n-p или read-from-minibuffer или аналогично), вместо этого сигнализируется об ошибке inhibited-interaction. Затем серверный код перехватывает эту ошибку и сообщает о ней клиенту.