>From 73e6238bad1e06b8c7ff14c1e4bf934f6de8335a Mon Sep 17 00:00:00 2001 From: Damien Cassou Date: Sun, 9 Apr 2017 12:46:57 +0200 Subject: [PATCH] Add current-line in simple.el * lisp/simple.el (current-line): New function. * test/list/simple-tests.el: Add tests for current-line. --- lisp/simple.el | 8 ++++++++ test/lisp/simple-tests.el | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/lisp/simple.el b/lisp/simple.el index 48c1a9b..c7e02a6 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1283,6 +1283,14 @@ line-number-at-pos (forward-line 0) (1+ (count-lines start (point)))))) +(defun current-line (&optional pos) + "Return (widen) line number at position POS. +If POS is nil, use current buffer location." + (save-excursion + (save-restriction + (widen) + (line-number-at-pos pos)))) + (defun what-cursor-position (&optional detail) "Print info on cursor position (on screen and within buffer). Also describe the character after point, and give its character code diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el index f4849c4..9dc82a7 100644 --- a/test/lisp/simple-tests.el +++ b/test/lisp/simple-tests.el @@ -374,5 +374,54 @@ simple-test-undo-with-switched-buffer (undo) (point))))) +(ert-deftest current-line-in-widen-buffer () + (let ((target-line 3)) + (with-temp-buffer + (insert "a\nb\nc\nd\n") + (goto-char (point-min)) + (forward-line (1- target-line)) + (should (equal (current-line) target-line))))) + +(ert-deftest current-line-in-narrow-buffer () + (let ((target-line 3)) + (with-temp-buffer + (insert "a\nb\nc\nd\n") + (goto-char (point-min)) + (forward-line (1- target-line)) + (narrow-to-region (line-beginning-position) (line-end-position)) + (should (equal (current-line) target-line))))) + +(ert-deftest current-line-given-pos () + (let ((target-line 3) + pos) + (with-temp-buffer + (insert "a\nb\nc\nd\n") + (goto-char (point-min)) + (forward-line (1- target-line)) + (setq pos (point)) + (goto-char (point-min)) + (should (equal (current-line pos) target-line))))) + +(ert-deftest current-line-saves-excursion () + (let (pos) + (with-temp-buffer + (insert "a\nb\nc\nd\n") + (goto-char (point-min)) + (forward-line 2) + (setq pos (point)) + (current-line (point-max)) + (should (equal pos (point)))))) + +(ert-deftest current-line-saves-restriction () + (let (pos) + (with-temp-buffer + (insert "a\nb\nc\nd\n") + (goto-char (point-min)) + (forward-line 2) + (narrow-to-region (line-beginning-position) (line-end-position)) + (should (equal (line-number-at-pos) 1)) + (current-line (point-max)) + (should (equal (line-number-at-pos) 1))))) + (provide 'simple-test) ;;; simple-test.el ends here -- 2.9.3