changeset 79193:a1c08bc44c8a

(savehist-save): Omit unreadable elements.
author Richard M. Stallman <rms@gnu.org>
date Wed, 24 Oct 2007 08:14:11 +0000
parents 8f2e292b71d0
children 09bb60dc9a47
files lisp/savehist.el
diffstat 1 files changed, 34 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/savehist.el	Wed Oct 24 08:12:40 2007 +0000
+++ b/lisp/savehist.el	Wed Oct 24 08:14:11 2007 +0000
@@ -309,10 +309,40 @@
 	(insert ?\n)
 	(dolist (symbol savehist-minibuffer-history-variables)
 	  (when (boundp symbol)
-	    (let ((value (savehist-trim-history (symbol-value symbol))))
-	      (when value		; don't save empty histories
-		(prin1 `(setq ,symbol ',value) (current-buffer))
-		(insert ?\n))))))
+	    (let ((value (savehist-trim-history (symbol-value symbol)))
+		  excess-space)
+	      (when value		; Don't save empty histories.
+		(insert "(setq ")
+		(prin1 symbol (current-buffer))
+		(insert " '(")
+		;; We will print an extra space before the first element.
+		;; Record where that is.
+		(setq excess-space (point))
+		;; Print elements of VALUE one by one, carefully.
+		(dolist (elt value)
+		  (let ((start (point)))
+		    (insert " ")
+		    (prin1 elt (current-buffer))
+		    ;; Try to read the element we just printed.
+		    (condition-case nil
+			(save-excursion
+			  (goto-char start)
+			  (read (current-buffer)))
+		      (error
+		       ;; If reading it gets an error, comment it out.
+		       (goto-char start)
+		       (insert "\n")
+		       (while (not (eobp))
+			 (insert ";;; ")
+			 (forward-line 1))
+		       (insert "\n")))
+		    (goto-char (point-max))))
+		;; Delete the extra space before the first element.
+		(save-excursion
+		  (goto-char excess-space)
+		  (if (eq (following-char) ?\s)
+		      (delete-region (point) (1+ (point)))))
+		(insert "))\n"))))))
       ;; Save the additional variables.
       (dolist (symbol savehist-additional-variables)
 	(when (boundp symbol)