Subject: Re: bug#56682: feature/improved-locked-narrowing 9dee6df39c: Reworked locked narrowing.

From: Gregory Heytings <[email-masked]>
Date: Tue, 14 Feb 2023 14:59:22 +0000

>> 1. There are three places (indent.c:line_number_display_width, 
>> xdisp.c:display_count_lines_logically, fileio.c:write_region) where we 
>> currently use
>>
>> record_unwind_protect (save_restriction_restore, save_restriction_save ());
>> Fwiden ();
>
> I'm not sure these should be subject to locked narrowing.  They don't 
> present performance problems with very long lines, AFAIK.
>
>> 2. In another place (process.c:Finternal_default_process_filter) we 
>> currently have:
>>
>> /* If the output marker is outside of the visible region, save
>>     the restriction and widen.  */
>> if (! (BEGV <= PT && PT <= ZV))
>>    Fwiden ();
>>
>> (without the "save the restriction" mentioned in the comment).
>
> This should be fixed to use unwind-protect of some kind, I think, and 
> that's orthogonal to locked narrowing.
>
>> 3. Also, in Ferase_buffer, we do Fwiden to "delete the entire contents 
>> of the current buffer".
>>
>> These five places probably need to be adapted to handle labeled 
>> narrowings correctly.  If you agree with that, I'll write a patch to 
>> that effect.
>
> I'm not sure what you mean by "adapt to".  Please tell more.
>

Fwiden in the functions above (which are AFAICS the only places in Emacs 
where Fwiden is called) is not prepared to the possibility of them being 
called inside a labeled narrowing, either one installed by the long lines 
code, or another one.  Basically we need to use a variant of 
reset_outermost_narrowings (for the current buffer only) where we use

record_unwind_protect (save_restriction_restore, save_restriction_save ());