Spec-Zone.ru › Elisp

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

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API