Для буферов / вкладок, сохраняющих / восстанавливающих части вопроса: Я использую elscreen и способ управления хранением / восстановлением сеанса рабочего стола, а конфигурация вкладки elscreen - следующий код в моем файле .emacs (используемые имена говорят сами за себя, и если функции сохранения / восстановления не должны выполняться каждый раз, когда emacs запускается, просто закомментируйте строки с помощью «(push # 'elscreen-store kill-emacs-hook)» и «(elscreen-restore ) "):
(defvar emacs-configuration-directory
"~/.emacs.d/"
"The directory where the emacs configuration files are stored.")
(defvar elscreen-tab-configuration-store-filename
(concat emacs-configuration-directory ".elscreen")
"The file where the elscreen tab configuration is stored.")
(defun elscreen-store ()
"Store the elscreen tab configuration."
(interactive)
(if (desktop-save emacs-configuration-directory)
(with-temp-file elscreen-tab-configuration-store-filename
(insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
"Restore the elscreen tab configuration."
(interactive)
(if (eq (type-of (desktop-read)) 'symbol)
(let ((screens (reverse
(read
(with-temp-buffer
(insert-file-contents elscreen-tab-configuration-store-filename)
(buffer-string))))))
(while screens
(setq screen (car (car screens)))
(setq buffers (split-string (cdr (car screens)) ":"))
(if (eq screen 0)
(switch-to-buffer (car buffers))
(elscreen-find-and-goto-by-buffer (car buffers) t t))
(while (cdr buffers)
(switch-to-buffer-other-window (car (cdr buffers)))
(setq buffers (cdr buffers)))
(setq screens (cdr screens))))))
(elscreen-restore)
EDIT
Я изменил "if (desktop-read)" в elscreen-restore, на "if (eq (type-of (desktop-read)) '' symbol)", потому что, если emacs уничтожается, а не закрывается в обычным способом файл .emacs.desktop.lock не удаляется. Таким образом, если по какой-либо причине сеанс рабочего стола не может быть восстановлен, возвращаемое значение «(desktop-read)» является «строкой», объясняющей ошибку, а не «nil», поэтому «if» не терпит неудачу, так как должен.