Function: previous-matching-history-element
previous-matching-history-element is an interactive and byte-compiled
function defined in simple.el.gz.
Signature
(previous-matching-history-element REGEXP N)
Documentation
Find the previous history element that matches REGEXP.
(Previous history elements refer to earlier actions.)
With prefix argument N, search for Nth previous match.
If N is negative, find the next or Nth next match.
Normally, history elements are matched case-insensitively if
case-fold-search is non-nil, but an uppercase letter in REGEXP
makes the search case-sensitive.
See also minibuffer-history-case-insensitive-variables.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/simple.el.gz
(defun previous-matching-history-element (regexp n)
"Find the previous history element that matches REGEXP.
\(Previous history elements refer to earlier actions.)
With prefix argument N, search for Nth previous match.
If N is negative, find the next or Nth next match.
Normally, history elements are matched case-insensitively if
`case-fold-search' is non-nil, but an uppercase letter in REGEXP
makes the search case-sensitive.
See also `minibuffer-history-case-insensitive-variables'."
(interactive
(let* ((enable-recursive-minibuffers t)
(regexp (read-from-minibuffer
(format-prompt "Previous element matching regexp"
(and minibuffer-history-search-history
(car minibuffer-history-search-history)))
nil minibuffer-local-map nil
'minibuffer-history-search-history
(car minibuffer-history-search-history))))
;; Use the last regexp specified, by default, if input is empty.
(list (if (string= regexp "")
(if minibuffer-history-search-history
(car minibuffer-history-search-history)
(user-error "No previous history search regexp"))
regexp)
(prefix-numeric-value current-prefix-arg))))
(unless (zerop n)
(if (and (zerop minibuffer-history-position)
(null minibuffer-text-before-history))
(setq minibuffer-text-before-history
(minibuffer-contents-no-properties)))
(let ((history (minibuffer-history-value))
(case-fold-search
(if (isearch-no-upper-case-p regexp t) ; assume isearch.el is dumped
;; On some systems, ignore case for file names.
(if (memq minibuffer-history-variable
minibuffer-history-case-insensitive-variables)
t
;; Respect the user's setting for case-fold-search:
case-fold-search)
nil))
prevpos
match-string
match-offset
(pos minibuffer-history-position))
(while (/= n 0)
(setq prevpos pos)
(setq pos (min (max 1 (+ pos (if (< n 0) -1 1))) (length history)))
(when (= pos prevpos)
(user-error (if (= pos 1)
"No later matching history item"
"No earlier matching history item")))
(setq match-string
(if (eq minibuffer-history-sexp-flag (minibuffer-depth))
(let ((print-level nil))
(prin1-to-string (nth (1- pos) history)))
(nth (1- pos) history)))
(setq match-offset
(if (< n 0)
(and (string-match regexp match-string)
(match-end 0))
(and (string-match (concat ".*\\(" regexp "\\)") match-string)
(match-beginning 1))))
(when match-offset
(setq n (+ n (if (< n 0) 1 -1)))))
(setq minibuffer-history-position pos)
(goto-char (point-max))
(delete-minibuffer-contents)
(insert match-string)
(goto-char (+ (minibuffer-prompt-end) match-offset))))
(if (memq (car (car command-history)) '(previous-matching-history-element
next-matching-history-element))
(setq command-history (cdr command-history))))