diff options
author | Simen Heggestøyl <simenheg@gmail.com> | 2019-06-22 12:49:04 +0200 |
---|---|---|
committer | Simen Heggestøyl <simenheg@gmail.com> | 2019-06-23 07:27:19 +0200 |
commit | abf7d0d802728e0ae8e064683eb5fb411bad911e (patch) | |
tree | dff14f64a25a3f5245a6a06e6cf173f855e53679 /lisp/textmodes/page.el | |
parent | b9d0337c84a6be7f26fd7134615048293320e234 (diff) | |
download | emacs-abf7d0d802728e0ae8e064683eb5fb411bad911e.tar.gz emacs-abf7d0d802728e0ae8e064683eb5fb411bad911e.tar.bz2 emacs-abf7d0d802728e0ae8e064683eb5fb411bad911e.zip |
Split up and add tests for two page.el functions
* lisp/textmodes/page.el (page--count-lines-page): New function
extracted from `count-lines-page'.
(count-lines-page): Extract main logic into `page--count-lines-page'.
(page--what-page); New function extracted from `what-page'.
(what-page): Extract main logic into `page--what-page'.
* test/lisp/textmodes/page-tests.el (page-tests-count-lines-page)
(page-tests-what-page): New tests for `page--count-lines-page' and
`page--what-page'. (Bug#36009)
Diffstat (limited to 'lisp/textmodes/page.el')
-rw-r--r-- | lisp/textmodes/page.el | 59 |
1 files changed, 34 insertions, 25 deletions
diff --git a/lisp/textmodes/page.el b/lisp/textmodes/page.el index 8921b697f3b..a42fc6e0538 100644 --- a/lisp/textmodes/page.el +++ b/lisp/textmodes/page.el @@ -125,41 +125,50 @@ thus showing a page other than the one point was originally in." (point))))) (put 'narrow-to-page 'disabled t) -(defun count-lines-page () - "Report number of lines on current page, and how many are before or after point." - (interactive) +(defun page--count-lines-page () + "Return a list of line counts on the current page. +The list is on the form (TOTAL BEFORE AFTER), where TOTAL is the +total number of lines on the current page, while BEFORE and AFTER +are the number of lines on the current page before and after +point, respectively." (save-excursion - (let ((opoint (point)) beg end - total before after) + (let ((opoint (point))) (forward-page) (beginning-of-line) - (or (looking-at page-delimiter) - (end-of-line)) - (setq end (point)) - (backward-page) - (setq beg (point)) - (setq total (count-lines beg end) - before (count-lines beg opoint) - after (count-lines opoint end)) - (message (ngettext "Page has %d line (%d + %d)" - "Page has %d lines (%d + %d)" total) - total before after)))) + (unless (looking-at page-delimiter) + (end-of-line)) + (let ((end (point))) + (backward-page) + (list (count-lines (point) end) + (count-lines (point) opoint) + (count-lines opoint end)))))) -(defun what-page () - "Print page and line number of point." +(defun count-lines-page () + "Report number of lines on current page, and how many are before or after point." (interactive) + (pcase-let ((`(,total ,before ,after) (page--count-lines-page))) + (message (ngettext "Page has %d line (%d + %d)" + "Page has %d lines (%d + %d)" total) + total before after))) + +(defun page--what-page () + "Return a list of the page and line number of point." (save-restriction (widen) (save-excursion (let ((count 1) - (opoint (point))) - (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 (line-number-at-pos opoint)))))) + (opoint (point))) + (goto-char (point-min)) + (while (re-search-forward page-delimiter opoint t) + (when (= (match-beginning 0) (match-end 0)) + (forward-char)) + (setq count (1+ count))) + (list count (line-number-at-pos opoint)))))) +(defun what-page () + "Print page and line number of point." + (interactive) + (apply #'message (cons "Page %d, line %d" (page--what-page)))) ;;; Place `provide' at end of file. |