]> code.delx.au - gnu-emacs/blobdiff - lisp/textmodes/page.el
Update copyright year to 2016
[gnu-emacs] / lisp / textmodes / page.el
index aecfbd698d7c14d978b2df141dc6dbf80caa7b75..17fda677754bf76d9b8f7e95c36062c93f461149 100644 (file)
@@ -1,15 +1,17 @@
-;;; page.el --- page motion commands for emacs.
+;;; page.el --- page motion commands for Emacs
 
-;; Copyright (C) 1985 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2016 Free Software Foundation, Inc.
 
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
+;; Keywords: wp convenience
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -89,16 +89,29 @@ thus showing a page other than the one point was originally in."
     (if (> arg 0)
        (forward-page arg)
       (if (< arg 0)
-         (forward-page (1- arg))))
+         (let ((adjust 0)
+               (opoint (point)))
+           ;; If we are not now at the beginning of a page,
+           ;; move back one extra time, to get to the start of this page.
+           (save-excursion
+             (beginning-of-line)
+             (or (and (looking-at page-delimiter)
+                      (eq (match-end 0) opoint))
+                 (setq adjust 1)))
+           (forward-page (- arg adjust)))))
     ;; Find the end of the page.
+    (set-match-data nil)
     (forward-page)
     ;; If we stopped due to end of buffer, stay there.
     ;; If we stopped after a page delimiter, put end of restriction
     ;; at the beginning of that line.
-    (if (save-excursion
-         (goto-char (match-beginning 0)) ; was (beginning-of-line)
-         (looking-at page-delimiter))
-       (beginning-of-line))
+    ;; Before checking the match that was found,
+    ;; verify that forward-page actually set the match data.
+    (if (and (match-beginning 0)
+            (save-excursion
+              (goto-char (match-beginning 0)) ; was (beginning-of-line)
+              (looking-at page-delimiter)))
+       (goto-char (match-beginning 0))) ; was (beginning-of-line)
     (narrow-to-region (point)
                      (progn
                        ;; Find the top of the page.
@@ -136,15 +149,16 @@ thus showing a page other than the one point was originally in."
   (save-restriction
     (widen)
     (save-excursion
-      (beginning-of-line)
       (let ((count 1)
            (opoint (point)))
-       (goto-char 1)
+       (goto-char (point-min))
        (while (re-search-forward page-delimiter opoint t)
+          (if (= (match-beginning 0) (match-end 0))
+              (forward-char 1))
          (setq count (1+ count)))
-       (message "Page %d, line %d"
-                count
-                (1+ (count-lines (point) opoint)))))))
+       (message "Page %d, line %d" count (line-number-at-pos opoint))))))
+
+
 \f
 ;;; Place `provide' at end of file.
 (provide 'page)