# emacs --daemon

Все никак не мог нормально перейти на использование Emacs в режиме демона, по той простой причине, что не мог определиться, как его корректно запускать и как его корректно закрывать...

Для начала немного теории... Emacs запускается  в режиме демона командой:

```shell
$ emacs --daemon
```

После чего для того, чтобы открыть новый фрейм Emacs, в котором можно работать используется команда:

```shell
$ emacsclient -c
```

или для консоли:

```shell
$ emacsclient -t
```

Запускать демон предлагается при загрузке иксов, но существует проблема, которая заключается в том, что если демон по каким либо причинам не был запущен, то вызов emacsclient ни к чему не приведет. Для решения данной проблемы уже неоднократно предлагалось создать отдельный скрипт со следующим содержимым:

```bash
#!/bin/bash
emacs --daemon && emacsclient -c
```

И затем запускать клиентом с дополнительной опцией:

```shell
$ emacsclient -c -a script.sh
```

Вроде бы ничего, но дополнительные костыли?? Так вот, как оказалось, все намного проще... Достаточно запускать клиент с такими опциями:

```shell
$ emacsclient -c -a ""
```

И никакого скрипта не нужно. Демон самостоятельно запуститься, если он не работал до того, отслеживать уже не нужно.

Теперь разберемся за корректным завершением. Для этого в конфиге .emacs прописываем следующую функцию и навешиваем ее на клавиатурную комбинацию:

```lisp
;; Kill-server
(defun my-kill-emacs ()
(interactive)
(save-some-buffers)
(desktop-save-in-desktop-dir)
(kill-emacs))

(global-set-key (kbd "C-x c") 'my-kill-emacs)
```

Как видно, используется сочетание клавиш Ctrl-x c. Перед тем, как завершить работу, нужно будет подтвердить свое действие.

Осталось решить проблему с тем, что демон не запускается в том случае, если в предыдущем сеансе работа была завершена некорректно. Если быть точным, при запуске в консоли будет произведен запрос на перезапись существующего desktop файла. А вот при запуске по горячим клавишам в DE мы этого не увидим и emacs будет просто висеть в списке процессов. Как убедить его постоянно использовать существующий файл, без вопросов, пока не знаю...

