Function: eshell-read-history
eshell-read-history is a byte-compiled function defined in
em-hist.el.gz.
Signature
(eshell-read-history &optional FILENAME SILENT)
Documentation
Sets the buffer's eshell-history-ring from a history file.
The name of the file is given by the variable
eshell-history-file-name. The history ring is of size
eshell-history-size, regardless of file size. If
eshell-history-file-name is nil this function does nothing.
If the optional argument SILENT is non-nil, we say nothing about a failure to read the history file.
This function is useful for major mode commands and mode hooks.
The structure of the history file should be one input command per
line, with the most recent command last. See also
eshell-hist-ignoredups and eshell-write-history.
Source Code
;; Defined in /usr/src/emacs/lisp/eshell/em-hist.el.gz
(defun eshell-read-history (&optional filename silent)
"Sets the buffer's `eshell-history-ring' from a history file.
The name of the file is given by the variable
`eshell-history-file-name'. The history ring is of size
`eshell-history-size', regardless of file size. If
`eshell-history-file-name' is nil this function does nothing.
If the optional argument SILENT is non-nil, we say nothing about a
failure to read the history file.
This function is useful for major mode commands and mode hooks.
The structure of the history file should be one input command per
line, with the most recent command last. See also
`eshell-hist-ignoredups' and `eshell-write-history'."
(let ((file (or filename eshell-history-file-name)))
(cond
((or (null file)
(equal file ""))
nil)
((not (file-readable-p file))
(or silent
(message "Cannot read history file %s" file)))
(t
(let* ((count 0)
(size eshell-history-size)
(ring (make-ring size))
(ignore-dups eshell-hist-ignoredups))
(with-temp-buffer
(insert-file-contents file)
;; Watch for those date stamps in history files!
(goto-char (point-max))
(while (and (< count size)
(re-search-backward "^[ \t]*\\([^#\n].*\\)[ \t]*$"
nil t))
(let ((history (match-string 1)))
(when (or (ring-empty-p ring)
(null ignore-dups)
(and (not (string-equal
(ring-ref ring (1- (ring-length ring)))
history))
(not (and (eq ignore-dups 'erase)
(ring-member ring history)))))
(ring-insert-at-beginning
ring (subst-char-in-string ?\177 ?\n history))
(setq count (1+ count))))))
(setq eshell-history-ring ring
eshell-history-index nil
eshell-hist--new-items 0))))))