Иногда бывает полезно запустить 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. Затем серверный
код перехватывает эту ошибку и сообщает о ней клиенту.