]> code.delx.au - gnu-emacs/blobdiff - lisp/savehist.el
* server.el (server-buffer-done): Avoid changing the buffer when
[gnu-emacs] / lisp / savehist.el
index 0b531b37f2bb876abaa0638548e0ca6d4bb6cea8..c1c9a3db8fae36a5cc65dd285e461e10bf465b99 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
@@ -8,10 +8,10 @@
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -147,12 +145,12 @@ save."
 
 ;; This should be capable of representing characters used by Emacs.
 ;; We prefer UTF-8 over ISO 2022 because it is well-known outside
-;; Mule.  XEmacs prir to 21.5 had UTF-8 provided by an external
+;; Mule.  XEmacs prior to 21.5 had UTF-8 provided by an external
 ;; package which may not be loaded, which is why we check for version.
 (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.")
@@ -228,13 +226,10 @@ which is probably undesirable."
 (add-minor-mode 'savehist-mode "")
 
 (defun savehist-load ()
-  "Obsolete function provided for transition from old versions of savehist.
-Don't call this from new code, use (savehist-mode 1) instead.
-
-This function loads the variables stored in `savehist-file' and turns on
-`savehist-mode'.  If `savehist-file' is in the old format that doesn't
-record the value of `savehist-minibuffer-history-variables', that value
-is deducted from the contents of the file."
+  "Load the variables stored in `savehist-file' and turn on `savehist-mode'.
+If `savehist-file' is in the old format that doesn't record
+the value of `savehist-minibuffer-history-variables', that
+value is deducted from the contents of the file."
   (savehist-mode 1)
   ;; Old versions of savehist distributed with XEmacs didn't save
   ;; savehist-minibuffer-history-variables.  If that variable is nil
@@ -251,7 +246,7 @@ is deducted from the contents of the file."
                ;; Collect VAR, i.e. (nth form 1).
                 (push (nth 1 form) vars))
               vars)))))
-(make-obsolete 'savehist-load 'savehist-mode)
+(make-obsolete 'savehist-load 'savehist-mode "22.1")
 
 (defun savehist-install ()
   "Hook savehist into Emacs.
@@ -308,11 +303,43 @@ 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 " ")
+                   ;; Try to print and then to read an element.
+                   (condition-case nil
+                       (progn
+                         (prin1 elt (current-buffer))
+                         (save-excursion
+                           (goto-char start)
+                           (read (current-buffer))))
+                     (error
+                      ;; If writing or reading gave 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)