[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);