Как запустить сервер Emacs, только если он не запущен?

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

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

(server-start)

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

set editor="emacsclient -nw %s"

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

Спасибо

5 ответов

Решение

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

export ALTERNATE_EDITOR=""

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

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

alias e='emacsclient --tty'

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

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

(load "server")
(unless (server-running-p) (server-start))

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

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

emacs --daemon

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

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

Добавьте это в свой .bashrc/ .zshrc

      if ! ps -e -o args | grep -q '^emacs --daemon$'; then
  emacs --daemon
else
  echo "Emacs server Online"
fi

Теперь ваша оболочка будет запускать демон при запуске, но только если он еще не запущен. Меньше времени ожидания при первом запуске emacsclient -t, и это быстрее, чем позволить emacs --daemon проверьте, работает ли он уже.

В качестве альтернативы вы можете просто добавить:

      eval 'emacsclient -e "(server-running-p)"'
Другие вопросы по тегам