emacs –daemon

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

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

$emacs --daemon

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

$emacsclient -c

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

$emacsclient -t

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

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

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

$emacsclient -c -a script.sh

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

$emacsclient -c -a ""

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

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

;; 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 будет просто висеть в списке процессов. Как убедить его постоянно использовать существующий файл, без вопросов, пока не знаю…

Похожие записи:

  1. Emacs Tramp-mode
  2. Emacs Password Manager
  3. Emacs jabber
  4. Emacs на рельсах…
  5. Juick-el

Метки:

Отзывов (21) на «emacs –daemon»

  • ;; load locked desktop anyway(when we killing emacs, the desktop file stayed locked)
    (setq desktop-load-locked-desktop t)

    Еще у меня была проблема с tramp буферами которые оставались открытыми, и запрашивали пароль при запуске демона – понятно что его ввести я не мог, решилось небольшой функцией

    (save-excursion
    (find-file «~/.emacs.desktop»)
    (set-buffer «.emacs.desktop»)
    (goto-char (point-min))
    (re-search-forward «;; Buffer section»)
    (while
    (re-search-forward «‘(\»/su:» (point-max) t)
    (progn
    (let ((beg (re-search-backward «(desktop-create-buffer»))
    (end (re-search-forward «)))»)))
    (kill-region beg end))))
    (save-buffer)
    (kill-buffer «.emacs.desktop»))

    которую просто надо вставить в .emacs

  • хммм…. сейчас попробую, спасибо большое!!!

  • (setq desktop-load-locked-desktop t) идеально вписалась в кинфигурацию, и теперь нет проблем с запросом использования существующего файла. Спасибо большое!

  • можно было просто посмотреть все переменные для пакета desktop, по крайней мере я так нашел, а вот с tramp буферами пришлось самому писать

  • на будущее учту!

  • Попробовал запускаться таким образом. Часть настроек сохранилась (кейбинды, шрифт), а часть (цвет фона) – нет. Странно, но явно поддается допиливанию.
    Я только не понял, а в чем выгода демона по сравнению с обычным способом?

  • У меня только со шрифтами проблема возникла в иксах, но я порешал эту проблему прописыванием нужных параметров в .Xdefaults
    А вот цвета нормально подгружаются из конфига…
    Выгода демона заключается в том, что не нужно каждый раз загружать емакс, он постоянно висит в памяти и по мере создания новых буферов (по сути окон) это происходит мгновенно, без необходимости чтения и обработки файлов конфигурации.

  • Спасибо за:
    $emacsclient -c -a «»

    ) а я там напридумывал действительно со скриптами )

  • То есть ускорение запуска, ясно. Надо будет попробовать. Спасибо.

  • да я сам сначала скрипты стал писать, пока не наткнулся на одну статейку, где указали данный путь… =)

  • спасибо большое! Опция -a действительно очень удобна, и desktop-load-locked-desktop тоже очень кстати.
    Кстати, а у вас не возникало проблем с некоторыми значениями в .Xdefaults? У меня они как-то частично видятся когда emacs демоном работает. Вот эти, к примеру, точно работают:

    Emacs.verticalScrollBars: off
    Emacs.cursorBlink: off
    Emacs.background: black
    Emacs.foreground: gray90
    Emacs.FontBackend: xf

    А вот эти нет:

    Emacs.menuBar: off
    Emacs.toolBar: off

    пришлось меню и тулбар в init.el отключать. Нормально конечно, но все таки странно.

  • Я раньше вообще все опции в конфиге емакса задавал… А с переходом на режим демона только используемый шрифт прописал…
    Все остальные настройки, такие как цвета, окружение, все прописано в конфиге самого емакса… Потому не смогу ответить на ваш вопрос…
    Не наблюдал я такой проблемы.

  • для решения проблемы со шрифтами надо сделать так:
    ;; frame config
    (add-to-list ‘default-frame-alist ‘(font . «-unknown-DejaVu Sans Mono-normal-normal-normal-*-15-*-*-*-*-0-iso10646-1″))
    (setq initial-frame-alist default-frame-alist)
    (setq special-display-frame-alist default-frame-alist)

    что значит добавление опций шрифта в опции создания фрейма, и вобще все настройки задаю в .emacs

  • Интересное решение… Спасибо!
    А почему шрифты все еще записываешь по старинке? А не xft-формат?

  • хм, да как есть в списке из set-default-font так и прописываю

  • А я в последнее время перешел на простое: Dejavu Sans Mono-9
    Просто и отображается отлично!

  • а что, от того в каком виде прописан шрифт как-то зависит отображение?

  • хм, нет конечно, просто писать удобней

  • нет не зависит, но, как уже сказал Артем, писать удобнее… =)

  • зачем использовать свою функцию для выхода
    из emacs?
    Есть же функция:
    save-buffers-kill-emacs

  • честно? не задумывался… в инете нашел и пока использовал данный вариант…

Вы можете оставить свой комментарий...

Имя (required)
Почта (обязательно)
Сайт