Как запустить сервер 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)"'