GNU bug report logs - #77747
'cursor-face-highlight-mode' signals 'args-out-of-range' in narrowed buffer

Previous Next

Package: emacs;

Reported by: Ship Mints <shipmints <at> gmail.com>

Date: Fri, 11 Apr 2025 15:33:02 UTC

Severity: normal

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #32 received at 77747 <at> debbugs.gnu.org (full text, mbox):

From: Ship Mints <shipmints <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 77747 <at> debbugs.gnu.org
Subject: Re: bug#77747: 'cursor-face-highlight-mode' signals
 'args-out-of-range' in narrowed buffer
Date: Fri, 25 Apr 2025 12:21:40 -0400
[Message part 1 (text/plain, inline)]
On Fri, Apr 25, 2025 at 10:58 AM Ship Mints <shipmints <at> gmail.com> wrote:

> On Fri, Apr 25, 2025 at 9:51 AM Ship Mints <shipmints <at> gmail.com> wrote:
>
>> On Sun, Apr 13, 2025 at 5:52 AM Eli Zaretskii <eliz <at> gnu.org> wrote:
>>
>>> > From: Ship Mints <shipmints <at> gmail.com>
>>> > Date: Fri, 11 Apr 2025 11:32:18 -0400
>>> >
>>> > -Q reproducer
>>> >
>>> > ;; The culprit appears to be `redisplay--update-cursor-face-highlight'
>>> > (setq debug-on-error t)
>>> > (cursor-face-highlight-mode)
>>> > (save-excursion (insert (propertize "cursor face text\n"
>>> >                                     'cursor-face 'region)))
>>> > (narrow-to-region (pos-bol) (pos-eol))
>>> > (setq unread-command-events (mapcar #'identity
>>> >                                     (kbd "C-n")))
>>>
>>> Thanks, does the below fix it?
>>>
>>> diff --git a/lisp/simple.el b/lisp/simple.el
>>> index ee09a6f..9e9dd15 100644
>>> --- a/lisp/simple.el
>>> +++ b/lisp/simple.el
>>> @@ -7265,7 +7265,7 @@ redisplay--update-cursor-face-highlight
>>>                (pt (window-point window))
>>>                (cursor-face (get-text-property pt 'cursor-face)))
>>>          (let* ((start (previous-single-property-change
>>> -                       (1+ pt) 'cursor-face nil (point-min)))
>>> +                       (min (1+ pt) (point-min)) 'cursor-face nil
>>> (point-min)))
>>>                 (end (next-single-property-change
>>>                       pt 'cursor-face nil (point-max)))
>>>                 (new (redisplay--highlight-overlay-function
>>>
>>
>> Eli, possible to apply the above soon?
>>
>
> Actually, I'm back to thinking this is better or the effect is that the
> whole buffer can wind up being unexpectedly highlighted:
>
>                        (min (1+ pt) (pos-bol)) 'cursor-face nil
> (point-min)))
>

To be clearer:

The original condition (1+ pt) 'cursor-face nil (point-min))) works fine in
a wide buffer.

The condition (min (1+ pt) (point-min)) 'cursor-face nil (point-min))) in a
wide buffer winds up highlighting all the way to point-min in a buffer
where every line has 'cursor-face which is undesirable.

I've experimented and tried to have 'cursor-face span only bol to eol-2 and
that is confirmed visually, yet the entire buffer before the current line
is highlighted in the cursor face.

mouse-face highlighting on the same lines (the text properties are applied
all together) works properly whether the buffer is narrowed or wide.

I suppose it's technically doing the correct thing if every single line in
a buffer has a cursor-face property?  How does one differentiate one line
from another, if so, and why does mouse-face work differently?
[Message part 2 (text/html, inline)]

This bug report was last modified 118 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.