From 831d96f924af07981134806e2268c325b0736bfb Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Sat, 24 Apr 2010 11:38:01 +0300 Subject: [PATCH] Add `desktop-frame-parameters-to-save'. --- lisp/desktop.el | 87 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/lisp/desktop.el b/lisp/desktop.el index e6864ac1efd..a224b176792 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -34,6 +34,7 @@ ;; - the mark & mark-active ;; - buffer-read-only ;; - some local variables +;; - the list of frames with associated tabs and window configurations. ;; To use this, use customize to turn on desktop-save-mode or add the ;; following line somewhere in your .emacs file: @@ -371,6 +372,53 @@ Possible values are: :group 'desktop :version "24.1") +(defcustom desktop-frame-parameters-to-save + '(name + top + left + width + height + border-width + internal-border-width + visibility + icon-name + icon-type + unsplittable + background-mode + display-type + menu-bar-lines + tool-bar-lines + tab-bar-lines + vertical-scroll-bars + horizontal-scroll-bars + scroll-bar-width + scroll-bar-background + scroll-bar-foreground + right-fringe + left-fringe + cursor-type + auto-lower + auto-raise + fullscreen + line-spacing + screen-gamma + border-color + cursor-color + mouse-color + background-color + foreground-color + font + font-parameter + font-backend + buffer-list + buried-buffer-list + ;; FIXME: minibuffer + modeline) + "List of frame parameters to save for each frame." + :type '(repeat symbol) + :group 'desktop + :version "24.1") + (defcustom desktop-restore-eager t "Number of buffers to restore immediately. Remaining buffers are restored lazily (when Emacs is idle). @@ -700,7 +748,24 @@ is nil, ask the user where to save the desktop." (defun desktop-frame-info (frame) (list frame - (frame-parameters frame) + ;; Frame parameters + (delq nil + (mapcar + (lambda (frame-parameter) + (cond + ;; Skip unsaveable frame parameters. + ((not (member (car frame-parameter) + desktop-frame-parameters-to-save)) + nil) + ;; Serialize a list of buffers. + ((memq (car frame-parameter) + '(buffer-list buried-buffer-list)) + (cons (car frame-parameter) + (mapcar 'buffer-name (cdr frame-parameter)))) + ;; Save the rest of frame parameters as is. + (t + frame-parameter))) + (frame-parameters frame))) (current-window-configuration-to-sexp frame))) ;; ---------------------------------------------------------------------------- @@ -1240,12 +1305,28 @@ directory DIRNAME." (makunbound this))) (setq desktop-buffer-locals (cdr desktop-buffer-locals))))))) +(defun desktop-create-frame-parameters (parameters) + (mapcar + (lambda (frame-parameter) + (cond + ;; Deserialize a list of buffers. + ((memq (car frame-parameter) + '(buffer-list buried-buffer-list)) + (cons (car frame-parameter) + (delq nil (mapcar 'get-buffer (cdr frame-parameter))))) + ;; Restore the rest of frame parameters as is. + (t + frame-parameter))) + parameters)) + (defun desktop-create-frame (desktop-file-version parameters window-configuration) - (make-frame parameters) + (make-frame (desktop-create-frame-parameters parameters)) (set-window-configuration-from-sexp window-configuration)) (defun desktop-set-frame (desktop-file-version parameters window-configuration) - (modify-frame-parameters nil parameters) + (modify-frame-parameters + nil + (desktop-create-frame-parameters parameters)) (set-window-configuration-from-sexp window-configuration)) ;; ---------------------------------------------------------------------------- -- 2.39.5