Как закрыть emacsclient gui frame, не убивая сервер

Как закрыть фрейм emacsclient, не убивая сервер / демон?

дела C-x C-c или же C-x 5 0 в графическом интерфейсе будут выходить как фрейм, так и сервер (и другие клиенты), тогда как при выходе из терминала это будет просто выход из текущего кадра

(PS: моя версия emacs - 24.2,gtk. Я пытался без init-файла, чтобы увидеть, если он пришел из моей конфигурации, но результаты были такими же)

6 ответов

Это говорит в минибуфере, когда emacsclient начинается, что "Когда закончите с буфером, введите Cx #".

Я думаю, что ключевым моментом здесь является то, что вам нужно запустить сервер в режиме демона. Если сервер работает в существующем процессе Emacs - например, если у вас есть (server-start) в вашем файле инициализации - сервер умирает с процессом emacs.

Существует несколько способов запуска сервера в режиме демона:

  • вызов emacs с --daemon опция командной строки
  • вызов emacsclient с --alternate-editor="" опция командной строки, которая в действительности будет работать emacs --daemon для вас тогда попытайтесь подключиться к нему

Как только вы переведете сервер в режим демона, вы сможете закрыть все фреймы, и демон продолжит сидеть и ждать дальнейших подключений.

Начиная emacsclient с -n/--no-wait флаг будет:

Не ждите возвращения сервера

Вам не нужно будет закрывать клиента в этом случае.

И если вам нужно закрыть emacsclient просто убейте буфер, сервер останется нетронутым.

Потому что ты побежал (server-start) из существующего фрейма этот фрейм не является эмасклиентным фреймом, и закрытие последнего такого фрейма, очевидно, получает ту же обработку, что и C-x C-c: это выйдет из Emacs.

Если вы использовали emacs --daemonвозможно используя ALTERNATE_EDITOR='' уловка, у вас не было бы этой проблемы; Вы могли бы просто использовать emacsclient -n -c чтобы открыть фрейм GUI, и после его закрытия демон просто будет сидеть и ждать, пока вы откроете новый фрейм, будь то графический или терминальный.

Я использую как Debian с i3, так и OSX. Я обычно выхожу из графического интерфейса emacsclient с помощью ярлыка закрытия окна менеджера окон. Например, в OSX я использую "Command + w", чтобы закрыть кадр GUI клиента, не убивая сервер, а в i3 я использую "Super + Shift + q" (окно закрытия по умолчанию для i3), чтобы выйти из кадра клиента.,

В современной версии GNU Emacs(27+) говорится:

Когда закончите с этой рамкой, введите Cx 5 0

Другие вопросы по тегам