From 7cc427b40be5ee0ab25ac9fbf714d59469c7890e Mon Sep 17 00:00:00 2001 From: lemyx Date: Tue, 31 Dec 2024 09:51:30 +0800 Subject: [PATCH] Support Emacs session save and restore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调用 M-x emacs-session-save 命令退出 Emacs, 再次启动 Emacs 时将加载之 前的 frame 和 窗口布局 --- init.el | 3 +++ lisp/init-save.el | 2 ++ lisp/init-session.el | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 lisp/init-session.el diff --git a/init.el b/init.el index b08dc48..7f78aee 100644 --- a/init.el +++ b/init.el @@ -44,6 +44,9 @@ (require 'init-tex) (require 'init-pdf) +(require 'init-session) +(emacs-session-restore) + (provide 'init) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; init.el ends here diff --git a/lisp/init-save.el b/lisp/init-save.el index cbfa74c..ce32318 100644 --- a/lisp/init-save.el +++ b/lisp/init-save.el @@ -3,6 +3,8 @@ ;;; Code: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; auto-save (add-to-list 'load-path "~/.emacs.d/site-lisp/auto-save/") (require 'auto-save) (auto-save-enable) diff --git a/lisp/init-session.el b/lisp/init-session.el new file mode 100644 index 0000000..d0ff8eb --- /dev/null +++ b/lisp/init-session.el @@ -0,0 +1,38 @@ +;;; init-session.el --- Session settings -*- lexical-binding: t -*- +;;; Commentary: + +;;; Code: + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; desktop +(setq desktop-load-locked-desktop t) ; don't popup dialog ask user, load anyway +(setq desktop-restore-frames t) ; save and restore the frame and window configuration +(setq desktop-restore-in-current-display nil) ; restore frames in current display +(setq desktop-restore-forces-onscreen "all") ; restore frames that are partially offscreen onscreen + +(defun emacs-session-restore () + "Restore emacs session." + (interactive) + (ignore-errors + ;; Restore session. + (desktop-read "~/.emacs.d/") + )) + +(defun emacs-session-save (&optional arg) + "Save emacs session." + (interactive "p") + (ignore-errors + (if (equal arg 4) + ;; Kill all buffers if with prefix argument. + (mapc 'kill-buffer (buffer-list)) + ;; Save all buffers before exit. + (auto-save-buffers)) + ;; Save session. + (make-directory "~/.emacs.d/" t) + (desktop-save "~/.emacs.d/") + ;; Exit emacs. + (kill-emacs))) + +(provide 'init-session) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; init-session.el ends here