(Обратите внимание, что, как говорится в противоположном, этот вопрос не совпадает с вопросом « Как запустить в режиме демона и подавить интерактивные диалоги?» , Поскольку отправитель «ответил» на этот вопрос, исключив причину появления определенного приглашения.)
Я хотел бы знать, существует ли общий способ не emacs --daemon
зависать навсегда, ожидая ответа на приглашение, отображаемое в минибуфере, который еще не существует.
Невозможно соединиться с emacsclient, чтобы ответить на эти запросы, потому что сервер не запускается, пока Emacs не завершит последовательность запуска. (Это означает, что если для ALTERNATE_EDITOR задана пустая строка, что приводит к тому, emacsclient
что сервер не может запустить новый демон, вы можете получить несколько демонов Emacs, которые все застряли и ждут.) Я должен killall emacs
исправить проблему прежде чем продолжить.
Я могу играть в whack-a-mole с каждой вещью, вызывающей приглашение при запуске, когда я ее идентифицирую (запуская Emacs в режиме, не являющемся демоном, и видя, что он запрашивает), но это не решение, потому что он не может остановить следующий демон. от зависания при запуске по новой причине.
В качестве примера: распространенная причина, по которой он зависал, была после перезагрузки системы или сбоя Emacs, когда первый Emacs после перезагрузки захотел узнать, можно ли украсть файлы блокировки у несуществующего Emacs. Я мог бы исправить это, предложив совет, который всегда отвечал «да» без взаимодействия. Но затем одним из файлов, которые были открыты при сохранении предыдущего сеанса, был файл TRAMP, требующий пароль sudo или SSH, поэтому демон застрял в ожидании запроса пароля. Поэтому я исправляю это, вручную редактируя файл сеанса (с помощью vi
или emacs -q
!), Чтобы удалить файлы, нарушающие работу, но это не мешает этому произойти в следующий раз.
Таким образом, я могу прекратить загрузку моего сеанса автоматически при запуске и изменить его на команду, которую я должен выполнить вручную из моего первого emacsclient. Но если он не загружает мой сеанс в фоновом режиме, поэтому он готов к тому времени, когда я буду его использовать, вся цель демона потеряна!
Итак, что я хотел бы это:
- (Лучше всего) Какой-то способ отложить запросы минибуфера, пока я не открою emacsclient, продолжая при этом завершать остальную часть инициализации.
- (ОК) Какой-то способ сделать все запросы минибуфера, которые я еще не советовал, как описано выше, просто вернуть,
no
если не запущен emacsclient. Я могу жить с ошибками моих буферов TRAMP до тех пор, пока они в основном работают.
Есть ли способ достичь любой из этих целей?
(read-desktop)
запустить при запуске восстановление рабочего стола , а затем, перед запуском emacs --daemon
, создать фиктивный файл блокировки, поместив целое число в файл .emacs.desktop.lock (куда поместить этот файл, к сожалению, зависит от вашей конфигурации , но, вероятно, либо ваш homedir, либо ~ / .emacs.d / .