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: Sat, 18 Feb 2023 23:12:27 +0000 [thread overview]
Message-ID: <c7d16160a784b64ce6c6@heytings.org> (raw)
In-Reply-To: <9e9ed8043f4ff9316461@heytings.org>
[-- Attachment #1: Type: text/plain, Size: 881 bytes --]
>>> Yes: that's what the "record_unwind_protect (save_restriction_restore,
>>> save_restriction_save ());" does.
>>
>> So save_restriction_restore will reinstate the buffer in the
>> narrowing_locks list?
>
> Yes:
>
> Lisp_Object
> save_restriction_save (void)
> {
> Lisp_Object restr = save_restriction_save_1 ();
> Lisp_Object locks = narrowing_locks_save ();
> return Fcons (restr, locks);
> }
>
> void
> save_restriction_restore (Lisp_Object data)
> {
> narrowing_locks_restore (XCDR (data));
> save_restriction_restore_1 (XCAR (data));
> }
>
Eli, do you have further comments or objections, or can I install this?
(Patch attached again for your convenience.)
BTW, I also would like to rename the narrowing_locks_* functions to make
their names coherent with your change of the name of the macro from
'with-narrowing' to 'with-restriction'. I guess that's okay?
[-- 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
next prev parent reply other threads:[~2023-02-18 23:12 UTC|newest]
Thread overview: 102+ 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>
2022-12-30 16:22 ` feature/improved-locked-narrowing 9dee6df39c: Reworked locked narrowing Stefan Monnier
2022-12-30 16:38 ` bug#56682: " 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
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 [this message]
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c7d16160a784b64ce6c6@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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.