Commit e91f80c4 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

*** empty log message ***

parent 52614803
......@@ -261,6 +261,7 @@ Note: it means the file has no messages in it.\n\^_")))
(define-key rmail-mode-map "\e\C-m" 'rmail-retry-failure)
(define-key rmail-mode-map "c" 'rmail-continue)
(define-key rmail-mode-map "f" 'rmail-forward)
(define-key rmail-mode-map "\er" 'rmail-search-backwards)
(define-key rmail-mode-map "\es" 'rmail-search)
(define-key rmail-mode-map "<" 'rmail-first-message)
(define-key rmail-mode-map ">" 'rmail-last-message)
......@@ -1108,11 +1109,11 @@ or forward if N is negative."
(if (>= where (rmail-msgbeg high)) high low)))
(defvar rmail-search-last-regexp nil)
(defun rmail-search (regexp &optional reversep)
(defun rmail-search (regexp &optional n)
"Show message containing next match for REGEXP.
Search in reverse (earlier messages) with non-nil second arg REVERSEP.
Interactively, empty argument means use same regexp used last time,
and reverse search is specified by a negative numeric arg."
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
......@@ -1128,7 +1129,9 @@ and reverse search is specified by a negative numeric arg."
(setq rmail-search-last-regexp regexp))
((not rmail-search-last-regexp)
(error "No previous Rmail search string")))
(list rmail-search-last-regexp reversep)))
(list rmail-search-last-regexp
(prefix-numeric-value current-prefix-arg))))
(or n (setq n 1))
(message "%sRmail search for %s..."
(if reversep "Reverse " "")
regexp)
......@@ -1137,20 +1140,23 @@ and reverse search is specified by a negative numeric arg."
(omax (point-max))
(opoint (point))
win
(reversep (< n 0))
(msg rmail-current-message))
(unwind-protect
(progn
(widen)
;; Check messages one by one, advancing message number up or down
;; but searching forward through each message.
(if reversep
(while (and (null win) (> msg 1))
(goto-char (rmail-msgbeg (setq msg (1- msg))))
(setq win (re-search-forward
regexp (rmail-msgend msg) t)))
(while (and (null win) (< msg rmail-total-messages))
(goto-char (rmail-msgbeg (setq msg (1+ msg))))
(setq win (re-search-forward regexp (rmail-msgend msg) t)))))
(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 win) (> msg 1))
(goto-char (rmail-msgbeg (setq msg (1- msg))))
(setq win (re-search-forward
regexp (rmail-msgend msg) t)))
(while (and (null win) (< msg rmail-total-messages))
(goto-char (rmail-msgbeg (setq msg (1+ msg))))
(setq win (re-search-forward regexp (rmail-msgend msg) t))))
(setq n (+ n (if (< n 0) -1 1)))))
(if win
(progn
;; If this is a reverse search and we found a message,
......@@ -1171,6 +1177,30 @@ and reverse search is specified by a negative numeric arg."
(ding)
(message "Search failed: %s" regexp)))))
(defun rmail-search-backwards (regexp &optional n)
"Show message containing previous match for REGEXP.
Prefix argument gives repeat count; negative argument means search
forward (through later 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)
(if rmail-search-last-regexp
(setq prompt (concat prompt
"(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))))
(rmail-search regexp (- (or n -1))))
;; Show the first message which has the `unseen' attribute.
(defun rmail-first-unseen-message ()
(let ((current 1)
......
......@@ -350,27 +350,6 @@ the minibuffer, then read and evaluate the result."
(setq command-history (cons command command-history)))
(eval command)))
;; (defvar repeat-complex-command nil)
(defvar minibuffer-history nil)
(defvar minibuffer-history-sexp-flag nil)
(setq minibuffer-history-variable 'minibuffer-history)
(setq minibuffer-history-position nil)
(define-key minibuffer-local-map "\en" 'next-history-element)
(define-key minibuffer-local-ns-map "\en" 'next-history-element)
(define-key minibuffer-local-ns-map "\en" 'next-history-element)
(define-key minibuffer-local-completion-map "\en" 'next-history-element)
(define-key minibuffer-local-completion-map "\en" 'next-history-element)
(define-key minibuffer-local-must-match-map "\en" 'next-history-element)
(define-key minibuffer-local-map "\ep" 'previous-history-element)
(define-key minibuffer-local-ns-map "\ep" 'previous-history-element)
(define-key minibuffer-local-ns-map "\ep" 'previous-history-element)
(define-key minibuffer-local-completion-map "\ep" 'previous-history-element)
(define-key minibuffer-local-completion-map "\ep" 'previous-history-element)
(define-key minibuffer-local-must-match-map "\ep" 'previous-history-element)
(defun repeat-complex-command (arg)
"Edit and re-evaluate last complex command, or ARGth from last.
A complex command is one which used the minibuffer.
......@@ -384,7 +363,6 @@ to get different commands to edit and resubmit."
(let ((elt (nth (1- arg) command-history))
(minibuffer-history-position arg)
(minibuffer-history-sexp-flag t)
(repeat-complex-command-flag t)
newcmd)
(if elt
(let ((minibuffer-history-variable ' command-history))
......@@ -400,6 +378,75 @@ to get different commands to edit and resubmit."
(setq command-history (cons newcmd command-history)))
(eval newcmd))
(ding))))
(defvar minibuffer-history nil)
(defvar minibuffer-history-sexp-flag nil)
(setq minibuffer-history-variable 'minibuffer-history)
(setq minibuffer-history-position nil)
(define-key minibuffer-local-map "\en" 'next-history-element)
(define-key minibuffer-local-ns-map "\en" 'next-history-element)
(define-key minibuffer-local-ns-map "\en" 'next-history-element)
(define-key minibuffer-local-completion-map "\en" 'next-history-element)
(define-key minibuffer-local-completion-map "\en" 'next-history-element)
(define-key minibuffer-local-must-match-map "\en" 'next-history-element)
(define-key minibuffer-local-map "\ep" 'previous-history-element)
(define-key minibuffer-local-ns-map "\ep" 'previous-history-element)
(define-key minibuffer-local-ns-map "\ep" 'previous-history-element)
(define-key minibuffer-local-completion-map "\ep" 'previous-history-element)
(define-key minibuffer-local-completion-map "\ep" 'previous-history-element)
(define-key minibuffer-local-must-match-map "\ep" 'previous-history-element)
(define-key minibuffer-local-map "\er" 'previous-matching-history-element)
(define-key minibuffer-local-ns-map "\er" 'previous-matching-history-element)
(define-key minibuffer-local-ns-map "\er" 'previous-matching-history-element)
(define-key minibuffer-local-completion-map "\er"
'previous-matching-history-element)
(define-key minibuffer-local-completion-map "\er"
'previous-matching-history-element)
(define-key minibuffer-local-must-match-map "\er"
'previous-matching-history-element)
(define-key minibuffer-local-map "\es" 'next-matching-history-element)
(define-key minibuffer-local-ns-map "\es" 'next-matching-history-element)
(define-key minibuffer-local-ns-map "\es" 'next-matching-history-element)
(define-key minibuffer-local-completion-map "\es"
'next-matching-history-element)
(define-key minibuffer-local-completion-map "\es"
'next-matching-history-element)
(define-key minibuffer-local-must-match-map "\es"
'next-matching-history-element)
(put 'previous-matching-history-element 'enable-recursive-minibuffers t)
(defun previous-matching-history-element (regexp n)
(interactive "sPrevious element matching (regexp): \np")
(let ((history (symbol-value minibuffer-history-variable))
(pos minibuffer-history-position))
(while (/= n 0)
(setq prevpos pos)
(setq pos (min (max 1 (+ pos (if (< n 0) -1 1))) (length history)))
(if (= pos prevpos)
(error (if (= pos 1)
"No following item in minibuffer history"
"No preceding item in minibuffer history")))
(if (string-match regexp
(if minibuffer-history-sexp-flag
(prin1-to-string (nth (1- pos) history))
(nth (1- pos) history)))
(setq n (+ n (if (< n 0) -1 1)))))
(setq minibuffer-history-position pos)
(erase-buffer)
(let ((elt (nth (1- pos) history)))
(insert (if minibuffer-history-sexp-flag
(prin1-to-string elt)
elt)))
(goto-char (point-min))))
(put 'next-matching-history-element 'enable-recursive-minibuffers t)
(defun next-matching-history-element (regexp n)
(interactive "sNext element matching (regexp): \np")
(previous-matching-history-element regexp (- n)))
(defun next-history-element (n)
"Insert the next element of the minibuffer history into the minibuffer."
......@@ -423,10 +470,8 @@ to get different commands to edit and resubmit."
(defun previous-history-element (n)
"Inserts the previous element of `command-history' into the minibuffer."
(interactive "p")
;; (if repeat-complex-command-flag
(next-history-element (- n)))
;; (repeat-complex-command 1)))
(defun goto-line (arg)
"Goto line ARG, counting from line 1 at beginning of buffer."
(interactive "NGoto line: ")
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment