43.18 Управление сессиями

Emacs поддерживает протокол управления сессиями X, который используется для приостановки и перезапуска приложений. В системе окон X программа, называемая менеджер сессий, отвечает за отслеживание запущенных приложений. Когда сервер X завершает работу, менеджер сессий просит приложения сохранить свое состояние и откладывает фактическое завершение до их ответа. Приложение также может отменить завершение.

Когда менеджер сессий перезапускает приостановленную сессию, он направляет эти приложения для индивидуальной загрузки их сохраненного состояния. Он делает это, указывая специальный аргумент командной строки, который сообщает, какое сохраненное состояние восстановить. Для Emacs этот аргумент — «--smid session».

Переменная: emacs-save-session-functions

Emacs поддерживает сохранение состояния через хук под названием emacs-save-session-functions. Emacs вызывает этот хук, когда менеджер сессий сообщает ему о завершении работы системы окон. Функции вызываются без аргументов, а текущий буфер устанавливается в временный буфер. Каждая функция может использовать insert для добавления кода Lisp в этот буфер. В конце Emacs сохраняет буфер в файле, называемом файлом сессии.

Затем, когда менеджер сессий перезапускает Emacs, он автоматически загружает файл сессии (см. Загрузка). Это выполняется функцией под названием emacs-session-restore, которая вызывается при запуске. См. Сводка: Последовательность действий при запуске.

Если функция в emacs-save-session-functions возвращает не-nil, Emacs сообщает менеджеру сессий отменить завершение.

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

(add-hook 'emacs-save-session-functions 'save-yourself-test)

(defun save-yourself-test ()
  (insert
   (format "%S" '(with-current-buffer "*scratch*"
                   (insert "I am restored"))))
  nil)