14 августа 2009 г.

Работа с Emacs --daemon

С выходом Emacs-23.1 сразу же перешел на указанную версию любимой программы. Как известно одной из новых функций является возможность запуска Emacs в режиме демона. Дальнейшая работа производится с помощью emacsclient позволяющего подключаться к демону как в иксах, так и из консоли.

Теперь для полного выхода из Emacs (убийство демона) использую функцию kill-emacs. Но в таком случае не сохраняются открытые буферы и сессия (desktop). Поэтому добавил в файл инициализации далее описанную функцию и назначил на нее клавиши C-x c:

(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)

Для запуска Emacs в меню OpenBox добавил пункт выполняющий следующее:

emacsclient -c -a emacsdc

Где emacsdc - скрипт следующего содержания лежащий в папке ~/bin, которая добавлена в PATH:

#!/bin/bash

emacs --daemon && emacsclient -c

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

emacsclient -t

P.S. Оказывается все намного проще! Не надо никаких скриптов придумывать. Запускать Emacs надо так:

emacsclient -c -a ""

P.P.S. Спасибо тов. Juev'у.

5 комментариев:

Анонимный комментирует...

Еще бы не помешало:

(y-or-n-p "Quit editor? ")

от случайного закрытия.

Ilya Zonov комментирует...

Спасибо за совет. Хотя Emacs и так спрашивает:

The current server still has clients; delete them? (y or n)

Но это на стадии уже самого kill-emacs. Так что если добавить (y-or-n-p "Quit editor?") придется два раза "y" нажимать.

Анонимный комментирует...

Как раз собирался уже поискать как его корректно закрывать в режиме демона... И тут ваша статья.
Спасибо большое!

dapi комментирует...

Объясните, а чего все с 23-й верси так носятся с этими emacs --daemon? Я уже лет 8 пользуюсь gnuserv и gnuclient - тоже самое, только называния другие.

Ilya Zonov комментирует...

Думаю все носятся с этими emacs --daemon, потому что эта фича вошла в официальный релиз.