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