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

;; 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
честно? не задумывался… в инете нашел и пока использовал данный вариант…