(compile-internal): Add WHEN to obsolescence declaration.
[bpt/emacs.git] / lisp / savehist.el
index 9343fc2..4a86d6f 100644 (file)
@@ -1,6 +1,6 @@
 ;;; savehist.el --- Save minibuffer history.
 
-;; Copyright (C) 1997, 2005, 2006, 2007  Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 
 ;; Author: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: minibuffer
@@ -10,7 +10,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -152,7 +152,7 @@ save."
 (defvar savehist-coding-system (if (and (featurep 'xemacs)
                                        (<= emacs-major-version 21)
                                        (< emacs-minor-version 5))
-                                  'iso-2022-8 'utf-8)
+                                  'iso-2022-8 'utf-8-unix)
   "The coding system savehist uses for saving the minibuffer history.
 Changing this value while Emacs is running is supported, but considered
 unwise, unless you know what you are doing.")
@@ -308,11 +308,42 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved,
               (current-buffer))
        (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))))))
+         (when (and (boundp symbol)
+                    (not (memq symbol savehist-ignored-variables)))
+           (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)