;;; savehist.el --- Save minibuffer history.
-;; Copyright (C) 1997, 2005, 2006 Free Software Foundation
+;; Copyright (C) 1997, 2005, 2006, 2007 Free Software Foundation, Inc.
;; Author: Hrvoje Niksic <hniksic@xemacs.org>
;; Keywords: minibuffer
;; 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,
(cond
;; Backward compatibility with previous versions of savehist.
((file-exists-p "~/.emacs-history") "~/.emacs-history")
- ((and (not (featurep 'xemacs)) (file-directory-p "~/.emacs.d/"))
- "~/.emacs.d/history")
+ ((and (not (featurep 'xemacs)) (file-directory-p user-emacs-directory))
+ (concat user-emacs-directory "history"))
((and (featurep 'xemacs) (file-directory-p "~/.xemacs/"))
"~/.xemacs/history")
;; For users without `~/.emacs.d/' or `~/.xemacs/'.
(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)
(error nil))))))
(defun savehist-minibuffer-hook ()
- (when (memq minibuffer-history-variable savehist-ignored-variables)
- (debug nil minibuffer-history-variable))
(unless (or (eq minibuffer-history-variable t)
;; XEmacs sets minibuffer-history-variable to t to mean "no
;; history is being recorded".