2019-03-02 01:04:41 -05:00
|
|
|
;;; core/autoload/sessions.el -*- lexical-binding: t; -*-
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Helpers
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom-save-session (&optional file)
|
|
|
|
"TODO"
|
|
|
|
(setq file (expand-file-name (or file (doom-session-file))))
|
|
|
|
(cond ((require 'persp-mode nil t)
|
|
|
|
(unless persp-mode (persp-mode +1))
|
|
|
|
(setq persp-auto-save-opt 0)
|
|
|
|
(persp-save-state-to-file file))
|
|
|
|
((and (require 'frameset nil t)
|
|
|
|
(require 'restart-emacs nil t))
|
|
|
|
(let ((frameset-filter-alist (append '((client . restart-emacs--record-tty-file))
|
|
|
|
frameset-filter-alist))
|
|
|
|
(desktop-base-file-name (file-name-nondirectory file))
|
|
|
|
(desktop-dirname (file-name-directory file))
|
|
|
|
(desktop-restore-eager t)
|
|
|
|
desktop-file-modtime)
|
|
|
|
(make-directory desktop-dirname t)
|
|
|
|
(desktop-save desktop-dirname t)))
|
|
|
|
((error "No session backend to save session with"))))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom-load-session (&optional file)
|
|
|
|
"TODO"
|
|
|
|
(setq file (expand-file-name (or file (doom-session-file))))
|
|
|
|
(message "Attempting to load %s" file)
|
|
|
|
(cond ((require 'persp-mode nil t)
|
|
|
|
(unless persp-mode (persp-mode +1))
|
|
|
|
(persp-load-state-from-file file))
|
|
|
|
((and (require 'frameset nil t)
|
|
|
|
(require 'restart-emacs nil t))
|
|
|
|
(restart-emacs--restore-frames-using-desktop file))
|
2019-03-04 20:44:35 -05:00
|
|
|
((error "No session backend to load session with"))))
|
2019-03-02 01:04:41 -05:00
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom-session-file ()
|
|
|
|
"TODO"
|
|
|
|
(cond ((require 'persp-mode nil t)
|
|
|
|
(expand-file-name persp-auto-save-fname persp-save-dir))
|
|
|
|
((require 'desktop nil t)
|
|
|
|
(desktop-full-file-name))
|
|
|
|
((error "No session backend available"))))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Command line switch
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom-restore-session-handler (&rest _)
|
|
|
|
"TODO"
|
|
|
|
(doom-load-session))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(add-to-list 'command-switch-alist (cons "--restore" #'doom-restore-session-handler))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Commands
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom/quickload-session ()
|
|
|
|
"TODO"
|
|
|
|
(interactive)
|
|
|
|
(message "Restoring session...")
|
|
|
|
(doom-load-session)
|
|
|
|
(message "Session restored. Welcome back."))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom/quicksave-session ()
|
|
|
|
"TODO"
|
|
|
|
(interactive)
|
|
|
|
(message "Saving session")
|
|
|
|
(doom-save-session)
|
|
|
|
(message "Saving session...DONE"))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom/load-session (file)
|
|
|
|
"TODO"
|
|
|
|
(interactive
|
|
|
|
(let ((session-file (doom-session-file)))
|
|
|
|
(list (or (read-file-name "Session to restore: "
|
|
|
|
(file-name-directory session-file)
|
|
|
|
nil t
|
|
|
|
(file-name-nondirectory session-file))
|
|
|
|
(user-error "No session selected. Aborting")))))
|
|
|
|
(unless file
|
|
|
|
(error "No session file selected"))
|
|
|
|
(message "Loading '%s' session" file)
|
|
|
|
(doom-load-session file))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom/save-session (file)
|
|
|
|
"TODO"
|
|
|
|
(interactive
|
|
|
|
(let ((session-file (doom-session-file)))
|
|
|
|
(list (or (read-file-name "Save session to: "
|
|
|
|
(file-name-directory session-file)
|
|
|
|
nil nil
|
|
|
|
(file-name-nondirectory session-file))
|
|
|
|
(user-error "No session selected. Aborting")))))
|
|
|
|
(unless file
|
|
|
|
(error "No session file selected"))
|
|
|
|
(message "Saving '%s' session" file)
|
|
|
|
(doom-save-session file))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defalias 'doom/restart #'restart-emacs)
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom/restart-and-restore (&optional debug)
|
|
|
|
"TODO"
|
|
|
|
(interactive "P")
|
|
|
|
(doom/quicksave-session)
|
2019-03-02 03:06:29 -05:00
|
|
|
(restart-emacs
|
|
|
|
(delq nil (list (if debug "--debug-init") "--restore"))))
|