[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master c96983e: desktop.el: Save mark-ring less verbosely.
From: |
Artur Malabarba |
Subject: |
[Emacs-diffs] master c96983e: desktop.el: Save mark-ring less verbosely. |
Date: |
Mon, 09 Feb 2015 13:26:57 +0000 |
branch: master
commit c96983efef178d104a98bb900dda2087df80b172
Author: Kelly Dean <address@hidden>
Commit: Artur Malabarba <address@hidden>
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 cd40ac7..d4b1fff 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
+2015-02-09 Kelly Dean <address@hidden>
+
+ * 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 <address@hidden>
* emacs-lisp/pcase.el (pcase-lambda): New Macro. (Bug#19814)
diff --git a/lisp/desktop.el b/lisp/desktop.el
index c355d7f..c272490 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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master c96983e: desktop.el: Save mark-ring less verbosely.,
Artur Malabarba <=