# HG changeset patch # User Stefan Monnier # Date 973813919 0 # Node ID a86c95343fa5ebf11bc9344ae19120453aade8df # Parent 482cbaef2af54c19d7ba59d7c9f5b1279d7fb153 (easy-mmode-define-navigation): Allow `next' to jump to after the end of the last match. diff -r 482cbaef2af5 -r a86c95343fa5 lisp/emacs-lisp/easy-mmode.el --- a/lisp/emacs-lisp/easy-mmode.el Thu Nov 09 23:49:35 2000 +0000 +++ b/lisp/emacs-lisp/easy-mmode.el Thu Nov 09 23:51:59 2000 +0000 @@ -519,7 +519,7 @@ (defmacro easy-mmode-define-navigation (base re &optional name endfun) "Define BASE-next and BASE-prev to navigate in the buffer. RE determines the places the commands should move point to. -NAME should describe the entities matched by RE and is used to build +NAME should describe the entities matched by RE. It is used to build the docstrings of the two functions. BASE-next also tries to make sure that the whole entry is visible by searching for its end (by calling ENDFUN if provided or by looking for @@ -538,16 +538,18 @@ (unless count (setq count 1)) (if (< count 0) (,prev-sym (- count)) (if (looking-at ,re) (incf count)) - (unless (re-search-forward ,re nil t count) - (error ,(format "No next %s" name))) - (goto-char (match-beginning 0)) - (when (eq (current-buffer) (window-buffer (selected-window))) - (let ((endpt (or (save-excursion - ,(if endfun `(,endfun) - `(re-search-forward ,re nil t 2))) - (point-max)))) - (unless (<= endpt (window-end)) - (recenter '(0))))))) + (if (not (re-search-forward ,re nil t count)) + (if (looking-at ,re) + (goto-char (or ,(if endfun `(,endfun)) (point-max))) + (error ,(format "No next %s" name))) + (goto-char (match-beginning 0)) + (when (eq (current-buffer) (window-buffer (selected-window))) + (let ((endpt (or (save-excursion + ,(if endfun `(,endfun) + `(re-search-forward ,re nil t 2))) + (point-max)))) + (unless (pos-visible-in-window-p endpt nil t) + (recenter '(0)))))))) (defun ,prev-sym (&optional count) ,(format "Go to the previous COUNT'th %s" (or name base-name)) (interactive)