Ответ 1
Он говорит в минибуфере, когда начинается emacsclient
, что "Когда сделано с буфером, введите C-x #".
Как вы закрываете рамку emacsclient, не убивая сервера/демона?
Выполнение C-x C-c
или C-x 5 0
в gui приведет к завершению работы как с кадром, так и с сервером (и другими клиентами), в то время как это просто выйдет из текущего кадра, когда он сделан из терминала.
(Ps: Моя версия emacs - 24.2, gtk. Я пробовал без init файла, чтобы узнать, не идет ли она из моей конфигурации, но результаты были одинаковыми)
Он говорит в минибуфере, когда начинается emacsclient
, что "Когда сделано с буфером, введите C-x #".
Я думаю, что ключевым моментом здесь является необходимость запуска сервера в режиме демона. Если сервер работает в существующем процессе emacs - например, если у вас есть (server-start)
в вашем файле инициализации - сервер умирает с процессом emacs.
Существует несколько способов запуска сервера в режиме демона:
emacs
с опцией командной строки --daemon
emacsclient
с параметром командной строки --alternate-editor=""
, который будет запускать emacs --daemon
для вас, затем попытайтесь подключиться к немуПосле того, как у вас есть сервер в режиме демона, вы сможете закрыть любые кадры, и демон продолжит сидеть и ждать дальнейших подключений.
Запуск символа emacsclient
с -n
/--no-wait
будет:
Не дожидайтесь возврата сервера
В этом случае вам не нужно закрывать клиент.
И если вам нужно закрыть emacsclient
, просто уничтожьте буфер, сервер останется неповрежденным.
Поскольку вы запустили (server-start)
из существующего фрейма, этот кадр не является фреймом emacsclient, и закрытие последнего такого кадра, очевидно, получает то же самое отношение, что и C-x C-c
: он выйдет из Emacs.
Если вы использовали emacs --daemon
, возможно, используя трюк ALTERNATE_EDITOR=''
, у вас не было бы этой проблемы; вы можете просто использовать emacsclient -n -c
, чтобы открыть кадр графического интерфейса пользователя, и после его закрытия демон просто сидит, ожидая, когда вы откроете новый фрейм, будь то графический или терминальный.
Я использую как Debian с i3, так и OSX. Я обычно выхожу из графического интерфейса emacsclient с помощью ярлыка окна закрытия оконного менеджера. Например, в OSX я использую команду "Command + w", чтобы закрыть клиентский графический интерфейс без уничтожения сервера, а в i3 я использую "Super + Shift + q" (окно закрытия по умолчанию для i3), чтобы выйти из кадра клиента.