Function: rmail-search

rmail-search is an interactive and byte-compiled function defined in rmail.el.gz.

Signature

(rmail-search REGEXP &optional N)

Documentation

Show message containing next match for REGEXP (but not the current msg).

Prefix argument gives repeat count; negative argument means search backwards (through earlier messages). Interactively, empty argument means use same regexp used last time.

View in manual

Probably introduced at or before Emacs version 17.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/mail/rmail.el.gz
(defun rmail-search (regexp &optional n)
  "Show message containing next match for REGEXP (but not the current msg).
Prefix argument gives repeat count; negative argument means search
backwards (through earlier messages).
Interactively, empty argument means use same regexp used last time."
  (interactive
    (let* ((reversep (< (prefix-numeric-value current-prefix-arg) 0))
	   (prompt
	    (concat (if reversep "Reverse " "") "Rmail search (regexp"))
	   regexp)
      (setq prompt
	    (concat prompt
		    (if rmail-search-last-regexp
			(concat ", default "
				rmail-search-last-regexp "): ")
		      "): ")))
      (setq regexp (read-string prompt))
      (cond ((not (equal regexp ""))
	     (setq rmail-search-last-regexp regexp))
	    ((not rmail-search-last-regexp)
	     (error "No previous Rmail search string")))
      (list rmail-search-last-regexp
	    (prefix-numeric-value current-prefix-arg))))
  (or n (setq n 1))
  (message "%sRmail search for %s..."
	   (if (< n 0) "Reverse " "")
	   regexp)
  (set-buffer rmail-buffer)
  (let ((orig-message rmail-current-message)
	(msg rmail-current-message)
	(reversep (< n 0))
	(opoint (if (rmail-buffers-swapped-p) (point)))
	found)
    (rmail-swap-buffers-maybe)
    (rmail-maybe-set-message-counters)
    (widen)
    (unwind-protect
	(while (/= n 0)
	  ;; Check messages one by one, advancing message number up or
	  ;; down but searching forward through each message.
	  (if reversep
	      (while (and (null found) (> msg 1))
		(setq msg (1- msg)
		      found (rmail-search-message msg regexp)))
	    (while (and (null found) (< msg rmail-total-messages))
	      (setq msg (1+ msg)
		    found (rmail-search-message msg regexp))))
	  (setq n (+ n (if reversep 1 -1))))
      (if found
	  (progn
	    (rmail-show-message msg)
	    ;; Search forward (if this is a normal search) or backward
	    ;; (if this is a reverse search) through this message to
	    ;; position point.  This search may fail because REGEXP
	    ;; was found in the hidden portion of this message.  In
	    ;; that case, move point to the beginning of visible
	    ;; portion.
	    (if reversep
		(progn
		  (goto-char (point-max))
		  (re-search-backward regexp nil 'move))
	      (goto-char (point-min))
	      (re-search-forward regexp nil t))
	    (message "%sRmail search for %s...done"
		     (if reversep "Reverse " "")
		     regexp))
	(rmail-show-message orig-message)
	(if opoint (goto-char opoint))
	(ding)
	(message "Search failed: %s" regexp)))))