Как узнать, запущен ли сервер emacs
Я хочу выполнить некоторый код в файле инициализации только в том случае, если сервер emacs запущен (особенно если emacs запущен с флагом --daemon
). Кажется, что никакой крючок не работает, когда вызывается server-start
, и нет никакой переменной, на которую я могу посмотреть, работает ли сервер.
Хакер должен использовать (featurep 'server)
, так как функция сервера не загружается, если только сервер не запущен, и это, похоже, работает для моих целей, но я хотел бы знать, как правильно это сделать, Спасибо.
Ответы
Ответ 1
Если серверный процесс запущен, связанный с ним объект процесса server-process
. Тестирование, если server-process
- не-nil, указывает, должен ли сервер работать; вы можете проверить его статус, чтобы проверить его в приемлемом состоянии.
(and (boundp 'server-process)
(memq (process-status server-process) '(connect listen open run)))
Вы можете проверить, был ли Emacs вызван как демон с помощью (daemonp)
.
Ответ 2
Обновление: код, отправленный Gilles, выдает, если в буфере нет процесса, например "Ошибка буфера не имеет никакого процесса". Когда этот код используется в ~/.emacs.el, мы рискуем, что Emacs не запустится. Чтобы поймать ошибку:
(defun --running-as-server ()
"Returns true if `server-start' has been called."
(condition-case nil
(and (boundp 'server-process)
(memq (process-status server-process)
'(connect listen open run)))
(error)))