]> git.eshelyaron.com Git - emacs.git/commitdiff
Move line-number-at-pos to C
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 7 Feb 2021 15:28:30 +0000 (16:28 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 7 Feb 2021 15:28:34 +0000 (16:28 +0100)
* doc/lispref/positions.texi (Text Lines): Revert previous change.

* lisp/simple.el (line-number-at-pos): Remove definition.

* lisp/simple.el (count-lines): Revert back to using
`forward-line', because there seems to be a disagreement on how
lines should be counted in a region...

* src/fns.c (Fline_number_at_pos): Rename from
Fline_number_at_position and adjust parameter list.

doc/lispref/positions.texi
etc/NEWS
lisp/simple.el
src/fns.c
test/src/fns-tests.el

index 9adce21baec6b17f8372b30a04f30af52bc8b110..dc0c7442d8d46d217fbfff4f5c8defd1c9aaf1ca 100644 (file)
@@ -437,18 +437,16 @@ prints a message reporting the number of lines, words, and characters
 in the buffer, or in the region if the region is active.
 @end deffn
 
-@defun line-number-at-position pos
-This function returns the line number in the current buffer
-corresponding to the buffer position @var{pos}.  If narrowing is in
-effect, this is the line number in the visible part of the buffer.
-@end defun
-
 @defun line-number-at-pos &optional pos absolute
 @cindex line number
-This function is like @code{line-number-at-position}, but if @var{pos}
-is @code{nil} or omitted, the current buffer position is used.  In
-addition, if @var{absolute} is non-@code{nil}, ignore any narrowing
-and return the absolute line number.
+This function returns the line number in the current buffer
+corresponding to the buffer position @var{pos}.  If @var{pos} is
+@code{nil} or omitted, the current buffer position is used. If
+@var{absolute} is @code{nil}, the default, counting starts at
+@code{(point-min)}, so the value refers to the contents of the
+accessible portion of the (potentially narrowed) buffer.  If
+@var{absolute} is non-@code{nil}, ignore any narrowing and return
+the absolute line number.
 @end defun
 
 @ignore
index 93a60bf14cf63e90a4e4029b74b789fef5d0749c..0faed3e5aa28f2de97c6cf19134561f7af09f6f9 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2192,10 +2192,6 @@ back in Emacs 23.1.  The affected functions are: 'make-obsolete',
 \f
 * Lisp Changes in Emacs 28.1
 
-+++
-** New function 'line-number-at-position'.
-This returns the line number in the visible portion of the buffer.
-
 ---
 ** New variable 'indent-line-ignored-functions'.
 This allows modes to cycle through a set of indentation functions
index eab2ac2569150c29dddc1b37b6301fec0f7f6bf1..73e3fb9f847d212c3d87dcaf7290c87a3859e995 100644 (file)
@@ -1472,22 +1472,7 @@ included in the count."
                                (assq prop buffer-invisibility-spec)))
                          (setq invisible-count (1+ invisible-count))))
                    invisible-count))))
-           (t (1- (line-number-at-position (point-max))))))))
-
-(defun line-number-at-pos (&optional pos absolute)
-  "Return buffer line number at position POS.
-If POS is nil, use current buffer location.
-
-If ABSOLUTE is nil, the default, counting starts
-at (point-min), so the value refers to the contents of the
-accessible portion of the (potentially narrowed) buffer.  If
-ABSOLUTE is non-nil, ignore any narrowing and return the
-absolute line number."
-  (if absolute
-      (save-restriction
-        (widen)
-        (line-number-at-position (or pos (point))))
-    (line-number-at-position (or pos (point)))))
+           (t (- (buffer-size) (forward-line (buffer-size))))))))
 
 (defcustom what-cursor-show-names nil
   "Whether to show character names in `what-cursor-position'."
index 479a5975ce770bf8c117c601e51535a267d1f9bb..d27f63222c4a49cfc85bb69b5235a8c2cdacbb01 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -5759,21 +5759,34 @@ in OBJECT.  */)
   return CDR (collector);
 }
 
-DEFUN ("line-number-at-position", Fline_number_at_position,
-       Sline_number_at_position, 1, 1, 0,
+DEFUN ("line-number-at-pos", Fline_number_at_pos,
+       Sline_number_at_pos, 0, 2, 0,
        doc: /* Return the line number at POSITION.
+If POSITION is nil, use the current buffer location.
+
 If the buffer is narrowed, the position returned is the position in the
-visible part of the buffer.  */)
-  (register Lisp_Object position)
+visible part of the buffer.  If ABSOLUTE is non-nil, count the lines
+from the absolute start of the buffer.  */)
+  (register Lisp_Object position, Lisp_Object absolute)
 {
-  CHECK_FIXNUM (position);
-  ptrdiff_t pos = XFIXNUM (position);
+  ptrdiff_t pos, start = BEGV;
+
+  if (NILP (position))
+    pos = PT;
+  else
+    {
+      CHECK_FIXNUM (position);
+      pos = XFIXNUM (position);
+    }
+
+  if (!NILP (absolute))
+    start = BEG_BYTE;
 
   /* Check that POSITION is n the visible range of the buffer. */
   if (pos < BEGV || pos > ZV)
-    args_out_of_range (make_int (BEGV), make_int (ZV));
+    args_out_of_range (make_int (start), make_int (ZV));
 
-  return make_int (count_lines (BEGV_BYTE, CHAR_TO_BYTE (pos)) + 1);
+  return make_int (count_lines (start, CHAR_TO_BYTE (pos)) + 1);
 }
 \f
 
@@ -5817,7 +5830,7 @@ syms_of_fns (void)
   defsubr (&Sdefine_hash_table_test);
   defsubr (&Sstring_search);
   defsubr (&Sobject_intervals);
-  defsubr (&Sline_number_at_position);
+  defsubr (&Sline_number_at_pos);
 
   /* Crypto and hashing stuff.  */
   DEFSYM (Qiv_auto, "iv-auto");
index 3a43142106b9194c00f35345bc680ddb466fb386..928fb15f1098a5b06d3c48ee96c3a4516f268134 100644 (file)
 (ert-deftest test-line-number-at-position ()
   (with-temp-buffer
     (insert (make-string 10 ?\n))
-    (should (= (line-number-at-position (point)) 11))
-    (should-error (line-number-at-position nil))
-    (should-error (line-number-at-position -1))
-    (should-error (line-number-at-position 100))))
+    (should (= (line-number-at-pos (point)) 11))
+    (should (= (line-number-at-pos nil) 11))
+    (should-error (line-number-at-pos -1))
+    (should-error (line-number-at-pos 100))))