Как запустить сервер Emacs, только если он не запущен? - PullRequest
42 голосов
/ 06 апреля 2011

Я бы хотел использовать emacsclient для редактирования писем в Mutt.

Я добавил это в .emacs

(server-start)

И в .muttrc я добавил

set editor="emacsclient -nw %s"

Кажется, они работают. Когда я запускаю второй Emacs, он жалуется, что сервер уже запущен, поэтому выдает ошибки. Как сделать (server-start) только если сервер еще не запущен?

Спасибо

Ответы [ 4 ]

57 голосов
/ 06 апреля 2011

Этот код запускает сервер, только если он не работает:

(load "server")
(unless (server-running-p) (server-start))
46 голосов
/ 07 апреля 2011

Демон emacs может быть запущен автоматически очень простым способом.Просто добавьте это в ваш .bashrc / .zshrc / что угодно

export ALTERNATE_EDITOR=""

Теперь, когда вы вызываете emacsclient (используя --tty или --create-frame), сервер будет запущен (с emacs --daemon)если он еще не запущен.

Я также нахожу этот псевдоним оболочки удобным:

alias e='emacsclient --tty'

Обратите внимание, что начиная с Emacs 23, это предпочтительный способ использовать Emacs в режиме демона.(start-server) в настоящее время в основном устарела.

10 голосов
/ 04 февраля 2014

Немного поздний ответ, но вот решение, которое работает для меня. Всякий раз, когда я запускаю emacsclient, я использую emacsclient -a '' -c. -a '' говорит emacsclient попытаться подключиться к существующему серверу, и если сервер не существует, запустите его и подключитесь к нему.

7 голосов
/ 06 апреля 2011

Избегайте проблемы полностью через

emacs --daemon

в любой оболочке или терминале, чтобы Emacs работал в фоновом режиме. Таким образом, emacsclient всегда рад, поскольку всегда есть сервер Emacs для подключения.

Это Emacs, есть также функция, которая запускает сервер только при необходимости, но я не могу вспомнить его имя прямо сейчас. Я использую опцию --daemon счастливо и счастливо.

...