]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix problem with (narrow-to-page 1) with point at point-max
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 22 Apr 2022 12:04:43 +0000 (14:04 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 22 Apr 2022 12:35:30 +0000 (14:35 +0200)
* lisp/textmodes/page.el (forward-page): Make this work more
consistently if point is on bol (bug#20663).

lisp/textmodes/page.el
test/lisp/textmodes/page-tests.el

index 3fc18323349a3be6487d17a4f1817656f76a18da..5d6f017eb9995b1f27f543b9b0acf2c1bf678013 100644 (file)
@@ -35,11 +35,18 @@ A page boundary is any line whose beginning matches the regexp
   (interactive "p")
   (or count (setq count 1))
   (while (and (> count 0) (not (eobp)))
-    ;; In case the page-delimiter matches the null string,
-    ;; don't find a match without moving.
-    (if (bolp) (forward-char 1))
-    (unless (re-search-forward page-delimiter nil t)
-      (goto-char (point-max)))
+    (if (and (looking-at page-delimiter)
+             (> (match-end 0) (point)))
+        ;; If we're standing at the page delimiter, then just skip to
+        ;; the end of it.  (But only if it's not a zero-length
+        ;; delimiter, because then we wouldn't have forward progress.)
+        (goto-char (match-end 0))
+      ;; In case the page-delimiter matches the null string,
+      ;; don't find a match without moving.
+      (when (bolp)
+        (forward-char 1))
+      (unless (re-search-forward page-delimiter nil t)
+        (goto-char (point-max))))
     (setq count (1- count)))
   (while (and (< count 0) (not (bobp)))
     ;; In case the page-delimiter matches the null string,
index 596f3a6ceb7d3d0b895c6c7ee4fe9f2f879e1198..b7217e69f0c436fe7959c24bef773e65714ba131 100644 (file)
     (narrow-to-page 2)
     (should (equal (buffer-string) "baz"))
     (narrow-to-page -1)
+    (should (equal (buffer-string) "bar\n"))
+
+    (widen)
+    (goto-char (point-min))
+    (narrow-to-page)
+    (should (equal (buffer-string) "foo\n"))
+    (goto-char (point-max))
+    (narrow-to-page 2)
+    (should (equal (buffer-string) "baz"))
+    (goto-char (point-max))
+    (narrow-to-page -1)
     (should (equal (buffer-string) "bar\n"))))
 
 (ert-deftest page-tests-count-lines-page ()
     (forward-page)
     (should (equal (page--what-page) '(3 4)))))
 
+
 ;;; page-tests.el ends here