From c96983efef178d104a98bb900dda2087df80b172 Mon Sep 17 00:00:00 2001 From: Kelly Dean Date: Mon, 9 Feb 2015 13:25:53 +0000 Subject: [PATCH] desktop.el: Save mark-ring less verbosely. For the discussion, see https://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00582.html --- lisp/ChangeLog | 7 +++++++ lisp/desktop.el | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cd40ac7a259..d4b1fff4373 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-02-09 Kelly Dean + + * desktop.el: Save mark-ring less verbosely. + (desktop-var-serdes-funs): New var. + (desktop-buffer-info, desktop-create-buffer): Use it. + (desktop-file-version): Update to 208. + 2015-02-09 Leo Liu * emacs-lisp/pcase.el (pcase-lambda): New Macro. (Bug#19814) diff --git a/lisp/desktop.el b/lisp/desktop.el index c355d7f080f..c2724904b58 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -136,7 +136,7 @@ (require 'cl-lib) (require 'frameset) -(defvar desktop-file-version "206" +(defvar desktop-file-version "208" "Version number of desktop file format. Written into the desktop file and used at desktop read to provide backward compatibility.") @@ -629,6 +629,18 @@ Only valid during frame saving & restoring; intended for internal use.") "When the desktop file was last modified to the knowledge of this Emacs. Used to detect desktop file conflicts.") +(defvar desktop-var-serdes-funs + (list (list + 'mark-ring + (lambda (mr) + (mapcar #'marker-position mr)) + (lambda (mr) + (mapcar #'copy-marker mr)))) + "Table of serialization/deserialization functions for variables. +Each record is a list of form: (var serializer deserializer). +These records can be freely reordered, deleted, or new ones added. +However, for compatibility, don't modify the functions for existing records.") + (defun desktop-owner (&optional dirname) "Return the PID of the Emacs process that owns the desktop file in DIRNAME. Return nil if no desktop file found or no Emacs process is using it. @@ -780,7 +792,12 @@ is nil, ask the user where to save the desktop." (push here ll)) ((member local loclist) (push local ll))))) - ll))) + ll) + (mapcar (lambda (record) + (let ((var (car record))) + (list var + (funcall (cadr record) (symbol-value var))))) + desktop-var-serdes-funs))) ;; ---------------------------------------------------------------------------- (defun desktop--v2s (value) @@ -1336,7 +1353,9 @@ after that many seconds of idle time." buffer-readonly buffer-misc &optional - buffer-locals) + buffer-locals + compacted-vars + &rest _unsupported) (let ((desktop-file-version file-version) (desktop-buffer-file-name buffer-filename) @@ -1426,7 +1445,14 @@ after that many seconds of idle time." (set (car this) (cdr this))) ;; An entry of the form `symbol'. (make-local-variable this) - (makunbound this)))))))) + (makunbound this))) + (unless (< desktop-file-version 208) ; Don't misinterpret any old custom args + (dolist (record compacted-vars) + (let* + ((var (car record)) + (deser-fun (cl-caddr (assq var desktop-var-serdes-funs)))) + (if deser-fun (set var (funcall deser-fun (cadr record)))))))) + result)))) ;; ---------------------------------------------------------------------------- ;; Backward compatibility -- update parameters to 205 standards. -- 2.39.2