aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emacs-lisp/easy-mmode.el24
1 files changed, 13 insertions, 11 deletions
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 00a941c81b9..e3c82e445de 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -519,7 +519,7 @@ Uses the `derived-mode-parent' property of the symbol to trace backwards."
519(defmacro easy-mmode-define-navigation (base re &optional name endfun) 519(defmacro easy-mmode-define-navigation (base re &optional name endfun)
520 "Define BASE-next and BASE-prev to navigate in the buffer. 520 "Define BASE-next and BASE-prev to navigate in the buffer.
521RE determines the places the commands should move point to. 521RE determines the places the commands should move point to.
522NAME should describe the entities matched by RE and is used to build 522NAME should describe the entities matched by RE. It is used to build
523 the docstrings of the two functions. 523 the docstrings of the two functions.
524BASE-next also tries to make sure that the whole entry is visible by 524BASE-next also tries to make sure that the whole entry is visible by
525 searching for its end (by calling ENDFUN if provided or by looking for 525 searching for its end (by calling ENDFUN if provided or by looking for
@@ -538,16 +538,18 @@ ENDFUN should return the end position (with or without moving point)."
538 (unless count (setq count 1)) 538 (unless count (setq count 1))
539 (if (< count 0) (,prev-sym (- count)) 539 (if (< count 0) (,prev-sym (- count))
540 (if (looking-at ,re) (incf count)) 540 (if (looking-at ,re) (incf count))
541 (unless (re-search-forward ,re nil t count) 541 (if (not (re-search-forward ,re nil t count))
542 (error ,(format "No next %s" name))) 542 (if (looking-at ,re)
543 (goto-char (match-beginning 0)) 543 (goto-char (or ,(if endfun `(,endfun)) (point-max)))
544 (when (eq (current-buffer) (window-buffer (selected-window))) 544 (error ,(format "No next %s" name)))
545 (let ((endpt (or (save-excursion 545 (goto-char (match-beginning 0))
546 ,(if endfun `(,endfun) 546 (when (eq (current-buffer) (window-buffer (selected-window)))
547 `(re-search-forward ,re nil t 2))) 547 (let ((endpt (or (save-excursion
548 (point-max)))) 548 ,(if endfun `(,endfun)
549 (unless (<= endpt (window-end)) 549 `(re-search-forward ,re nil t 2)))
550 (recenter '(0))))))) 550 (point-max))))
551 (unless (pos-visible-in-window-p endpt nil t)
552 (recenter '(0))))))))
551 (defun ,prev-sym (&optional count) 553 (defun ,prev-sym (&optional count)
552 ,(format "Go to the previous COUNT'th %s" (or name base-name)) 554 ,(format "Go to the previous COUNT'th %s" (or name base-name))
553 (interactive) 555 (interactive)