;;; 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
;; 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.")
(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
;; 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.
(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)