Управление сеансами
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)
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Session-Management.html