desktop.el: Save mark-ring less verbosely.

For the discussion, see
https://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00582.html
This commit is contained in:
Kelly Dean
2015-02-09 13:25:53 +00:00
committed by Artur Malabarba
parent 2f70087153
commit c96983efef
2 changed files with 37 additions and 4 deletions

View File

@@ -1,3 +1,10 @@
2015-02-09 Kelly Dean <kelly@prtime.org>
* 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 <sdl.web@gmail.com>
* emacs-lisp/pcase.el (pcase-lambda): New Macro. (Bug#19814)

View File

@@ -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.