aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Cassou2017-04-09 12:46:57 +0200
committerNicolas Petton2017-06-19 11:17:56 +0200
commitae98cdf9431604d0f722f1db217ca06debfbb7b6 (patch)
tree282b0658d520e638e6905f40153343de34259ff0
parentdbe3e416af5d845dc774341eb66971ab1a72983b (diff)
downloademacs-ae98cdf9431604d0f722f1db217ca06debfbb7b6.tar.gz
emacs-ae98cdf9431604d0f722f1db217ca06debfbb7b6.zip
Add current-line in simple.el
* lisp/simple.el (current-line): New function. * test/list/simple-tests.el: Add tests for current-line.
-rw-r--r--lisp/simple.el29
-rw-r--r--test/lisp/simple-tests.el49
2 files changed, 67 insertions, 11 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index a5565ab6e73..e3b7665bf5a 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1270,18 +1270,25 @@ and the greater of them is not at the start of a line."
1270 done))) 1270 done)))
1271 (- (buffer-size) (forward-line (buffer-size))))))) 1271 (- (buffer-size) (forward-line (buffer-size)))))))
1272 1272
1273(defun line-number-at-pos (&optional pos) 1273(defun line-number-at-pos (&optional pos absolute-p)
1274 "Return (narrowed) buffer line number at position POS. 1274 "Return buffer line number at position POS.
1275If POS is nil, use current buffer location. 1275If POS is nil, use current buffer location.
1276Counting starts at (point-min), so the value refers 1276
1277to the contents of the accessible portion of the buffer." 1277If ABSOLUTE-P is nil, the default, counting starts
1278 (let ((opoint (or pos (point))) start) 1278at (point-min), so the value refers to the contents of the
1279 (save-excursion 1279accessible portion of the (potentially narrowed) buffer. If
1280 (goto-char (point-min)) 1280ABSOLUTE-P is non-nil, ignore any narrowing and return the
1281 (setq start (point)) 1281absolute line number."
1282 (goto-char opoint) 1282 (save-restriction
1283 (forward-line 0) 1283 (when absolute-p
1284 (1+ (count-lines start (point)))))) 1284 (widen))
1285 (let ((opoint (or pos (point))) start)
1286 (save-excursion
1287 (goto-char (point-min))
1288 (setq start (point))
1289 (goto-char opoint)
1290 (forward-line 0)
1291 (1+ (count-lines start (point)))))))
1285 1292
1286(defun what-cursor-position (&optional detail) 1293(defun what-cursor-position (&optional detail)
1287 "Print info on cursor position (on screen and within buffer). 1294 "Print info on cursor position (on screen and within buffer).
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el
index 180dcc0a209..ad7aee1db17 100644
--- a/test/lisp/simple-tests.el
+++ b/test/lisp/simple-tests.el
@@ -448,5 +448,54 @@ See Bug#21722."
448 (call-interactively #'eval-expression) 448 (call-interactively #'eval-expression)
449 (should (equal (current-message) "66 (#o102, #x42, ?B)")))))) 449 (should (equal (current-message) "66 (#o102, #x42, ?B)"))))))
450 450
451(ert-deftest line-number-at-pos-in-widen-buffer ()
452 (let ((target-line 3))
453 (with-temp-buffer
454 (insert "a\nb\nc\nd\n")
455 (goto-char (point-min))
456 (forward-line (1- target-line))
457 (should (equal (line-number-at-pos) target-line))
458 (should (equal (line-number-at-pos nil t) target-line)))))
459
460(ert-deftest line-number-at-pos-in-narrow-buffer ()
461 (let ((target-line 3))
462 (with-temp-buffer
463 (insert "a\nb\nc\nd\n")
464 (goto-char (point-min))
465 (forward-line (1- target-line))
466 (narrow-to-region (line-beginning-position) (line-end-position))
467 (should (equal (line-number-at-pos) 1))
468 (should (equal (line-number-at-pos nil t) target-line)))))
469
470(ert-deftest line-number-at-pos-keeps-restriction ()
471 (with-temp-buffer
472 (insert "a\nb\nc\nd\n")
473 (goto-char (point-min))
474 (forward-line 2)
475 (narrow-to-region (line-beginning-position) (line-end-position))
476 (should (equal (line-number-at-pos) 1))
477 (line-number-at-pos nil t)
478 (should (equal (line-number-at-pos) 1))))
479
480(ert-deftest line-number-at-pos-keeps-point ()
481 (let (pos)
482 (with-temp-buffer
483 (insert "a\nb\nc\nd\n")
484 (goto-char (point-min))
485 (forward-line 2)
486 (setq pos (point))
487 (line-number-at-pos)
488 (line-number-at-pos nil t)
489 (should (equal pos (point))))))
490
491(ert-deftest line-number-at-pos-when-passing-point ()
492 (let (pos)
493 (with-temp-buffer
494 (insert "a\nb\nc\nd\n")
495 (should (equal (line-number-at-pos 1) 1))
496 (should (equal (line-number-at-pos 3) 2))
497 (should (equal (line-number-at-pos 5) 3))
498 (should (equal (line-number-at-pos 7) 4)))))
499
451(provide 'simple-test) 500(provide 'simple-test)
452;;; simple-test.el ends here 501;;; simple-test.el ends here