Skip to content

Commit

Permalink
Move line-number-at-pos to C
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
larsmagne committed Feb 7, 2021
1 parent 5a4d50d commit 56e76f0
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 43 deletions.
18 changes: 8 additions & 10 deletions doc/lispref/positions.texi
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions etc/NEWS
Expand Up @@ -2192,10 +2192,6 @@ back in Emacs 23.1. The affected functions are: 'make-obsolete',

* 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
Expand Down
17 changes: 1 addition & 16 deletions lisp/simple.el
Expand Up @@ -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'."
Expand Down
31 changes: 22 additions & 9 deletions src/fns.c
Expand Up @@ -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);
}


Expand Down Expand Up @@ -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");
Expand Down
8 changes: 4 additions & 4 deletions test/src/fns-tests.el
Expand Up @@ -1102,7 +1102,7 @@
(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))))

0 comments on commit 56e76f0

Please sign in to comment.