emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master b5bbb29634e 1/5: Merge from origin/emacs-29


From: Eli Zaretskii
Subject: master b5bbb29634e 1/5: Merge from origin/emacs-29
Date: Sat, 15 Jul 2023 05:35:46 -0400 (EDT)

branch: master
commit b5bbb29634eca42582c01e2fd30c867d22f53298
Merge: a047fb8494c 01fb898420f
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    Merge from origin/emacs-29
    
    01fb898420f Simplify after adding internal function to enter a labele...
    b741dc7fcde Add internal function to enter a labeled restriction
---
 lisp/subr.el  |  5 +++--
 src/editfns.c | 46 ++++++++++++++++------------------------------
 2 files changed, 19 insertions(+), 32 deletions(-)

diff --git a/lisp/subr.el b/lisp/subr.el
index fac5fd58092..d44a24fcd3e 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -4077,8 +4077,9 @@ same LABEL argument.
 (defun internal--with-restriction (start end body &optional label)
   "Helper function for `with-restriction', which see."
   (save-restriction
-    (narrow-to-region start end)
-    (if label (internal--label-restriction label))
+    (if label
+        (internal--labeled-narrow-to-region start end label)
+      (narrow-to-region start end))
     (funcall body)))
 
 (defmacro without-restriction (&rest rest)
diff --git a/src/editfns.c b/src/editfns.c
index b920857b664..cb093be75d6 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2682,11 +2682,12 @@ DEFUN ("delete-and-extract-region", 
Fdelete_and_extract_region,
    records the restriction bounds that were current when the first
    labeled restriction was entered (which may be a narrowing that was
    set by the user and is visible on display).  This alist is used
-   internally by narrow-to-region, widen, internal--label-restriction,
-   internal--unlabel-restriction and save-restriction.  For efficiency
-   reasons, an alist is used instead of a buffer-local variable:
-   otherwise reset_outermost_restrictions, which is called during each
-   redisplay cycle, would have to loop through all live buffers.  */
+   internally by narrow-to-region, internal--labeled-narrow-to-region,
+   widen, internal--unlabel-restriction and save-restriction.  For
+   efficiency reasons, an alist is used instead of a buffer-local
+   variable: otherwise reset_outermost_restrictions, which is called
+   during each redisplay cycle, would have to loop through all live
+   buffers.  */
 static Lisp_Object labeled_restrictions;
 
 /* Add BUF with its list of labeled RESTRICTIONS in the
@@ -2868,8 +2869,7 @@ void
 labeled_narrow_to_region (Lisp_Object begv, Lisp_Object zv,
                          Lisp_Object label)
 {
-  Fnarrow_to_region (begv, zv);
-  Finternal__label_restriction (label);
+  Finternal__labeled_narrow_to_region (begv, zv, label);
   record_unwind_protect (restore_point_unwind, Fpoint_marker ());
   record_unwind_protect (unwind_labeled_narrow_to_region, label);
 }
@@ -2885,7 +2885,6 @@ To gain access to other portions of the buffer, use
 `without-restriction' with the same label.  */)
   (void)
 {
-  Fset (Qoutermost_restriction, Qnil);
   Lisp_Object buf = Fcurrent_buffer ();
   Lisp_Object label = labeled_restrictions_peek_label (buf);
 
@@ -2967,13 +2966,6 @@ argument.  To gain access to other portions of the 
buffer, use
       if (e > zv_charpos) e = zv_charpos;
     }
 
-  /* Record the accessible range of the buffer when narrow-to-region
-     is called, that is, before applying the narrowing.  That
-     information is used only by internal--label-restriction.  */
-  Fset (Qoutermost_restriction, list3 (Qoutermost_restriction,
-                                      Fpoint_min_marker (),
-                                      Fpoint_max_marker ()));
-
   if (BEGV != s || ZV != e)
     current_buffer->clip_changed = 1;
 
@@ -2989,20 +2981,18 @@ argument.  To gain access to other portions of the 
buffer, use
   return Qnil;
 }
 
-DEFUN ("internal--label-restriction", Finternal__label_restriction,
-       Sinternal__label_restriction, 1, 1, 0,
-       doc: /* Label the current restriction with LABEL.
+DEFUN ("internal--labeled-narrow-to-region", 
Finternal__labeled_narrow_to_region,
+       Sinternal__labeled_narrow_to_region, 3, 3, 0,
+       doc: /* Restrict editing in this buffer to START-END, and label the 
restriction with LABEL.
 
 This is an internal function used by `with-restriction'.  */)
-  (Lisp_Object label)
+  (Lisp_Object start, Lisp_Object end, Lisp_Object label)
 {
   Lisp_Object buf = Fcurrent_buffer ();
-  Lisp_Object outermost_restriction
-    = buffer_local_value (Qoutermost_restriction, buf);
-  /* If internal--label-restriction is ever called without being
-     preceded by narrow-to-region, do nothing.  */
-  if (NILP (outermost_restriction))
-    return Qnil;
+  Lisp_Object outermost_restriction = list3 (Qoutermost_restriction,
+                                            Fpoint_min_marker (),
+                                            Fpoint_max_marker ());
+  Fnarrow_to_region (start, end);
   if (NILP (labeled_restrictions_peek_label (buf)))
     labeled_restrictions_push (buf, outermost_restriction);
   labeled_restrictions_push (buf, list3 (label,
@@ -4865,10 +4855,6 @@ This variable is experimental; email 
32252@debbugs.gnu.org if you need
 it to be non-nil.  */);
   binary_as_unsigned = false;
 
-  DEFVAR_LISP ("outermost-restriction", Voutermost_restriction,
-              doc: /* Outermost narrowing bounds, if any.  Internal use only.  
*/);
-  Voutermost_restriction = Qnil;
-  Fmake_variable_buffer_local (Qoutermost_restriction);
   DEFSYM (Qoutermost_restriction, "outermost-restriction");
   Funintern (Qoutermost_restriction, Qnil);
 
@@ -4963,7 +4949,7 @@ it to be non-nil.  */);
   defsubr (&Sdelete_and_extract_region);
   defsubr (&Swiden);
   defsubr (&Snarrow_to_region);
-  defsubr (&Sinternal__label_restriction);
+  defsubr (&Sinternal__labeled_narrow_to_region);
   defsubr (&Sinternal__unlabel_restriction);
   defsubr (&Ssave_restriction);
   defsubr (&Stranspose_regions);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]