unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Gregory Heytings <gregory@heytings.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 56682@debbugs.gnu.org, monnier@iro.umontreal.ca, akrl@sdf.org
Subject: bug#56682: feature/improved-locked-narrowing 9dee6df39c: Reworked locked narrowing.
Date: Tue, 14 Feb 2023 22:50:24 +0000	[thread overview]
Message-ID: <0f053182b00a59a41caa@heytings.org> (raw)
In-Reply-To: <83lel0chku.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 520 bytes --]


>> 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 ());
>
> Ah, okay.  Please do, and thanks.
>

And here's the patch!

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Remove-narrowing-locks-before-calling-Fwiden.patch --]
[-- Type: text/x-diff; name=Remove-narrowing-locks-before-calling-Fwiden.patch, Size: 4485 bytes --]

From c482389fd59edcbc738a4d48ca6b65d14af60b25 Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Tue, 14 Feb 2023 22:41:14 +0000
Subject: [PATCH] Remove narrowing locks before calling Fwiden

* src/editfns.c (narrowing_locks_remove_in_current_buffer) : New
function.

* src/lisp.h: Make it externally visible.

* src/xdisp.c (display_count_lines_logically):
* src/lread.c (readevalloop):
* src/indent.c (line_number_display_width):
* src/fileio.c (write_region):
* src/callproc.c (Fcall_process_region):
* src/buffer.c (Ferase_buffer): Use it.
---
 src/buffer.c   | 1 +
 src/callproc.c | 1 +
 src/editfns.c  | 7 +++++++
 src/fileio.c   | 1 +
 src/indent.c   | 1 +
 src/lisp.h     | 1 +
 src/lread.c    | 1 +
 src/xdisp.c    | 1 +
 8 files changed, 14 insertions(+)

diff --git a/src/buffer.c b/src/buffer.c
index df1f5206668..a9d004d8727 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2386,6 +2386,7 @@ DEFUN ("erase-buffer", Ferase_buffer, Serase_buffer, 0, 0, "*",
 so the buffer is truly empty after this.  */)
   (void)
 {
+  narrowing_locks_remove_in_current_buffer ();
   Fwiden ();
 
   del_range (BEG, Z);
diff --git a/src/callproc.c b/src/callproc.c
index 5e1e1a8cc0a..c144f6e66d9 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1113,6 +1113,7 @@ t (mix it with ordinary output), or a file name string.
         {
           /* No need to save restrictions since we delete everything
              anyway.  */
+          narrowing_locks_remove_in_current_buffer ();
           Fwiden ();
           del_range (BEG, Z);
         }
diff --git a/src/editfns.c b/src/editfns.c
index f83c5c7259b..32f654af8c3 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2814,6 +2814,13 @@ narrowing_locks_restore (Lisp_Object buf_and_saved_locks)
     narrowing_locks_add (buf, saved_locks);
 }
 
+/* Remove all narrowing locks in the current buffer.  */
+void
+narrowing_locks_remove_in_current_buffer (void)
+{
+  narrowing_locks_remove (Fcurrent_buffer ());
+}
+
 static void
 unwind_narrow_to_region_locked (Lisp_Object tag)
 {
diff --git a/src/fileio.c b/src/fileio.c
index f00c389a520..cf5a4ecf80a 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5269,6 +5269,7 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename,
     }
 
   record_unwind_protect (save_restriction_restore, save_restriction_save ());
+  narrowing_locks_remove_in_current_buffer ();
 
   /* Special kludge to simplify auto-saving.  */
   if (NILP (start))
diff --git a/src/indent.c b/src/indent.c
index 6de18d749ca..5f6dc47f034 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -2065,6 +2065,7 @@ line_number_display_width (struct window *w, int *width, int *pixel_width)
 	{
 	  record_unwind_protect (save_restriction_restore,
 				 save_restriction_save ());
+	  narrowing_locks_remove_in_current_buffer ();
 	  Fwiden ();
 	  saved_restriction = true;
 	}
diff --git a/src/lisp.h b/src/lisp.h
index 1276285e2f2..637ede7051e 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4689,6 +4689,7 @@ XMODULE_FUNCTION (Lisp_Object o)
 					    ptrdiff_t, bool);
 extern void narrow_to_region_locked (Lisp_Object, Lisp_Object, Lisp_Object);
 extern void reset_outermost_narrowings (void);
+extern void narrowing_locks_remove_in_current_buffer (void);
 extern void init_editfns (void);
 extern void syms_of_editfns (void);
 
diff --git a/src/lread.c b/src/lread.c
index d0dc85f51c8..28ca483b819 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2255,6 +2255,7 @@ readevalloop (Lisp_Object readcharfun,
 	  record_unwind_protect_excursion ();
 	  /* Save ZV in it.  */
 	  record_unwind_protect (save_restriction_restore, save_restriction_save ());
+	  narrowing_locks_remove_in_current_buffer ();
 	  /* Those get unbound after we read one expression.  */
 
 	  /* Set point and ZV around stuff to be read.  */
diff --git a/src/xdisp.c b/src/xdisp.c
index 5c5ecaa2bcb..6f2b4e6cd41 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -24111,6 +24111,7 @@ display_count_lines_logically (ptrdiff_t start_byte, ptrdiff_t limit_byte,
   ptrdiff_t val;
   specpdl_ref pdl_count = SPECPDL_INDEX ();
   record_unwind_protect (save_restriction_restore, save_restriction_save ());
+  narrowing_locks_remove_in_current_buffer ();
   Fwiden ();
   val = display_count_lines (start_byte, limit_byte, count, byte_pos_ptr);
   unbind_to (pdl_count, Qnil);
-- 
2.39.0


  reply	other threads:[~2023-02-14 22:50 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <166939872890.18950.12581667269687468681@vcs2.savannah.gnu.org>
     [not found] ` <20221125175209.51166C004B6@vcs2.savannah.gnu.org>
     [not found]   ` <jwvk028zxbs.fsf-monnier+emacs@gnu.org>
2022-12-30 16:38     ` bug#56682: feature/improved-locked-narrowing 9dee6df39c: Reworked locked narrowing Gregory Heytings
2022-12-30 16:41       ` Gregory Heytings
2022-12-30 17:01       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-30 17:25         ` Gregory Heytings
2022-12-30 18:51           ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-12  9:34             ` Eli Zaretskii
2023-01-14 21:38               ` Gregory Heytings
2023-01-26  7:29                 ` Eli Zaretskii
2023-01-28 15:11                   ` Gregory Heytings
2023-01-28 15:36                     ` Eli Zaretskii
2023-01-30  9:00                       ` Gregory Heytings
2023-01-30 13:07                         ` Eli Zaretskii
2023-01-30 15:03                           ` Gregory Heytings
2023-01-30 17:11                             ` Eli Zaretskii
2023-01-30 17:24                               ` Juri Linkov
2023-01-30 17:52                                 ` Eli Zaretskii
2023-01-30 17:56                                   ` Juri Linkov
2023-01-30 18:05                                     ` Eli Zaretskii
2023-01-30 18:56                               ` Dmitry Gutov
2023-01-30 19:02                                 ` Eli Zaretskii
2023-01-30 21:07                                   ` Dmitry Gutov
2023-01-30 21:49                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-30 23:29                                       ` Dmitry Gutov
2023-01-31 12:14                                     ` Eli Zaretskii
2023-01-31 15:58                                       ` Dmitry Gutov
2023-01-31 15:17                                 ` Gregory Heytings
2023-01-31 16:03                                   ` Dmitry Gutov
2023-01-31 15:14                               ` Gregory Heytings
2023-01-31 16:25                                 ` Dmitry Gutov
2023-01-31 21:46                                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-31 22:25                                     ` Dmitry Gutov
2023-02-01 18:55                                 ` Eli Zaretskii
2023-02-01 20:46                                   ` dick
2023-02-01 22:42                                   ` Gregory Heytings
2023-02-02  6:43                                     ` Eli Zaretskii
2023-02-03  0:20                                       ` Gregory Heytings
2023-02-03  7:39                                         ` Eli Zaretskii
2023-02-03 22:12                                           ` Gregory Heytings
2023-02-04  6:32                                             ` Eli Zaretskii
2023-02-09  1:57                                               ` Gregory Heytings
2023-02-09  7:01                                                 ` Eli Zaretskii
2023-02-09 10:33                                                   ` Gregory Heytings
2023-02-09 14:26                                                     ` Eli Zaretskii
2023-02-09 14:39                                                       ` Gregory Heytings
2023-02-09 15:46                                                         ` Eli Zaretskii
2023-02-09 16:11                                                           ` Gregory Heytings
2023-02-09 17:02                                                             ` Eli Zaretskii
2023-02-09 17:44                                                               ` Juri Linkov
2023-02-09 20:47                                                               ` Gregory Heytings
2023-02-09 22:46                                                                 ` Drew Adams
2023-02-09 23:06                                                                   ` Drew Adams
2023-02-13 18:11                                                                   ` Eli Zaretskii
2023-02-10  7:44                                                                 ` Eli Zaretskii
2023-02-10 23:05                                                                   ` Gregory Heytings
2023-02-09 17:31                                                           ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-02-09 17:43                                                             ` Eli Zaretskii
2023-02-09 17:57                                                             ` Juri Linkov
2023-02-10 16:46                                                   ` Andrea Corallo
2023-02-11  7:18                                                     ` Eli Zaretskii
2023-02-13 11:00                                                       ` Gregory Heytings
2023-02-13 18:10                                                         ` Eli Zaretskii
2023-02-14 10:30                                                           ` Gregory Heytings
2023-02-14 14:37                                                             ` Eli Zaretskii
2023-02-14 14:59                                                               ` Gregory Heytings
2023-02-14 16:55                                                                 ` Eli Zaretskii
2023-02-14 22:50                                                                   ` Gregory Heytings [this message]
2023-02-15 12:36                                                                     ` Eli Zaretskii
2023-02-15 13:37                                                                       ` Gregory Heytings
2023-02-15 14:10                                                                         ` Eli Zaretskii
2023-02-15 14:37                                                                           ` Gregory Heytings
2023-02-18 23:12                                                                             ` Gregory Heytings
2023-02-19  6:29                                                                               ` Eli Zaretskii
     [not found]                                                                                 ` <a9b3c867-aa6a-2979-a83-dd700e985c9@heytings.org>
2023-03-29 14:52                                                                                   ` Gregory Heytings
2023-04-01  0:27                                                                                     ` Gregory Heytings
2023-04-01  5:42                                                                                       ` Eli Zaretskii
2023-04-01  9:04                                                                                         ` Gregory Heytings
2023-04-01 11:11                                                                                     ` Eli Zaretskii
2023-04-01 14:26                                                                                       ` Gregory Heytings
2023-04-01 15:09                                                                                         ` Eli Zaretskii
2023-04-01 15:41                                                                                           ` Gregory Heytings
2023-04-01 16:21                                                                                             ` Eli Zaretskii
2023-04-01 17:01                                                                                               ` Gregory Heytings
2023-04-01 17:12                                                                                                 ` Eli Zaretskii
2023-04-01 21:56                                                                                                   ` Gregory Heytings
2023-04-02  5:16                                                                                                     ` Eli Zaretskii
2023-04-04  2:55                                                                                                       ` Richard Stallman
2023-04-04 10:50                                                                                                         ` Eli Zaretskii
     [not found]                                                                                                       ` <ccfcc63b8da74932424b@heytings.org>
2023-05-04  5:31                                                                                                         ` Eli Zaretskii
2023-05-04 15:45                                                                                                           ` Gregory Heytings
2023-05-05 15:26                                                                                                             ` Eli Zaretskii
2023-05-05 21:29                                                                                                               ` Gregory Heytings
2023-05-06  6:26                                                                                                                 ` Eli Zaretskii
2023-05-09 21:48                                                                                                                   ` Gregory Heytings
2023-05-10 14:00                                                                                                                     ` Eli Zaretskii
2023-05-12 11:12                                                                                                                       ` Eli Zaretskii
2023-05-12 12:50                                                                                                                         ` Gregory Heytings
2023-05-12 22:18                                                                                                                           ` Gregory Heytings
2023-05-13  6:41                                                                                                                             ` Eli Zaretskii
2023-01-30 14:46                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-30 15:05                           ` Gregory Heytings
2023-01-30 15:08                             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0f053182b00a59a41caa@heytings.org \
    --to=gregory@heytings.org \
    --cc=56682@debbugs.gnu.org \
    --cc=akrl@sdf.org \
    --cc=eliz@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).