Как закрыть 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