[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#55847: 29.0.50; line-number-at-pos ignores absolute parameter when c
From: |
Eli Zaretskii |
Subject: |
bug#55847: 29.0.50; line-number-at-pos ignores absolute parameter when checking position range |
Date: |
Wed, 08 Jun 2022 17:02:32 +0300 |
tags 55847 notabug
thanks
> From: Antoine Kalmbach <ane@iki.fi>
> Date: Wed, 08 Jun 2022 14:44:10 +0300
>
>
> When working with a narrowed buffer, line-number-at-pos complains
> that the passed position parameter is out of range.
>
> I believe this occurs because in fns.c there is check as follows:
>
> if (pos < BEGV || pos > ZV)
Yes, and that's by design. With very rare exceptions, Emacs always
behaves as if text outside of the narrowed region doesn't exist.
This is not a bug.
> This works just fine when the buffer isn't narrowed, but narrowing
> affects BEGV. Suppose the buffer is narrowed, and you want to get the
> line number for position x where x is before where the current narrowing
> begins, passing (line-number-at-pos x t) now reports an error, because
> the correct thing to check is BEGV_BYTE, not BEGV.
You mean BEG, not BEGV_BYTE, I believe. BEGV_BYTE is the _byte_
position corresponding to BEGV (which is a character position).
Anyway, if you want to get line-number-at-pos outside of the
restriction, you can simply do
(save-restriction
(widen)
(line-number-at-pos POS))
This is what we do in Emacs if we want to access position outside of
the narrowed region.