Merge branch 'scratch/bug64391' into emacs-29
This commit is contained in:
commit
8e06809fcc
2 changed files with 19 additions and 32 deletions
|
@ -3980,8 +3980,9 @@ same LABEL argument.
|
||||||
(defun internal--with-restriction (start end body &optional label)
|
(defun internal--with-restriction (start end body &optional label)
|
||||||
"Helper function for `with-restriction', which see."
|
"Helper function for `with-restriction', which see."
|
||||||
(save-restriction
|
(save-restriction
|
||||||
(narrow-to-region start end)
|
(if label
|
||||||
(if label (internal--label-restriction label))
|
(internal--labeled-narrow-to-region start end label)
|
||||||
|
(narrow-to-region start end))
|
||||||
(funcall body)))
|
(funcall body)))
|
||||||
|
|
||||||
(defmacro without-restriction (&rest rest)
|
(defmacro without-restriction (&rest rest)
|
||||||
|
|
|
@ -2682,11 +2682,12 @@ DEFUN ("delete-and-extract-region", Fdelete_and_extract_region,
|
||||||
records the restriction bounds that were current when the first
|
records the restriction bounds that were current when the first
|
||||||
labeled restriction was entered (which may be a narrowing that was
|
labeled restriction was entered (which may be a narrowing that was
|
||||||
set by the user and is visible on display). This alist is used
|
set by the user and is visible on display). This alist is used
|
||||||
internally by narrow-to-region, widen, internal--label-restriction,
|
internally by narrow-to-region, internal--labeled-narrow-to-region,
|
||||||
internal--unlabel-restriction and save-restriction. For efficiency
|
widen, internal--unlabel-restriction and save-restriction. For
|
||||||
reasons, an alist is used instead of a buffer-local variable:
|
efficiency reasons, an alist is used instead of a buffer-local
|
||||||
otherwise reset_outermost_restrictions, which is called during each
|
variable: otherwise reset_outermost_restrictions, which is called
|
||||||
redisplay cycle, would have to loop through all live buffers. */
|
during each redisplay cycle, would have to loop through all live
|
||||||
|
buffers. */
|
||||||
static Lisp_Object labeled_restrictions;
|
static Lisp_Object labeled_restrictions;
|
||||||
|
|
||||||
/* Add BUF with its list of labeled RESTRICTIONS in the
|
/* 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,
|
labeled_narrow_to_region (Lisp_Object begv, Lisp_Object zv,
|
||||||
Lisp_Object label)
|
Lisp_Object label)
|
||||||
{
|
{
|
||||||
Fnarrow_to_region (begv, zv);
|
Finternal__labeled_narrow_to_region (begv, zv, label);
|
||||||
Finternal__label_restriction (label);
|
|
||||||
record_unwind_protect (restore_point_unwind, Fpoint_marker ());
|
record_unwind_protect (restore_point_unwind, Fpoint_marker ());
|
||||||
record_unwind_protect (unwind_labeled_narrow_to_region, label);
|
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. */)
|
`without-restriction' with the same label. */)
|
||||||
(void)
|
(void)
|
||||||
{
|
{
|
||||||
Fset (Qoutermost_restriction, Qnil);
|
|
||||||
Lisp_Object buf = Fcurrent_buffer ();
|
Lisp_Object buf = Fcurrent_buffer ();
|
||||||
Lisp_Object label = labeled_restrictions_peek_label (buf);
|
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;
|
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)
|
if (BEGV != s || ZV != e)
|
||||||
current_buffer->clip_changed = 1;
|
current_buffer->clip_changed = 1;
|
||||||
|
|
||||||
|
@ -2989,20 +2981,18 @@ argument. To gain access to other portions of the buffer, use
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN ("internal--label-restriction", Finternal__label_restriction,
|
DEFUN ("internal--labeled-narrow-to-region", Finternal__labeled_narrow_to_region,
|
||||||
Sinternal__label_restriction, 1, 1, 0,
|
Sinternal__labeled_narrow_to_region, 3, 3, 0,
|
||||||
doc: /* Label the current restriction with LABEL.
|
doc: /* Restrict editing in this buffer to START-END, and label the restriction with LABEL.
|
||||||
|
|
||||||
This is an internal function used by `with-restriction'. */)
|
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 buf = Fcurrent_buffer ();
|
||||||
Lisp_Object outermost_restriction
|
Lisp_Object outermost_restriction = list3 (Qoutermost_restriction,
|
||||||
= buffer_local_value (Qoutermost_restriction, buf);
|
Fpoint_min_marker (),
|
||||||
/* If internal--label-restriction is ever called without being
|
Fpoint_max_marker ());
|
||||||
preceded by narrow-to-region, do nothing. */
|
Fnarrow_to_region (start, end);
|
||||||
if (NILP (outermost_restriction))
|
|
||||||
return Qnil;
|
|
||||||
if (NILP (labeled_restrictions_peek_label (buf)))
|
if (NILP (labeled_restrictions_peek_label (buf)))
|
||||||
labeled_restrictions_push (buf, outermost_restriction);
|
labeled_restrictions_push (buf, outermost_restriction);
|
||||||
labeled_restrictions_push (buf, list3 (label,
|
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. */);
|
it to be non-nil. */);
|
||||||
binary_as_unsigned = false;
|
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");
|
DEFSYM (Qoutermost_restriction, "outermost-restriction");
|
||||||
Funintern (Qoutermost_restriction, Qnil);
|
Funintern (Qoutermost_restriction, Qnil);
|
||||||
|
|
||||||
|
@ -4963,7 +4949,7 @@ it to be non-nil. */);
|
||||||
defsubr (&Sdelete_and_extract_region);
|
defsubr (&Sdelete_and_extract_region);
|
||||||
defsubr (&Swiden);
|
defsubr (&Swiden);
|
||||||
defsubr (&Snarrow_to_region);
|
defsubr (&Snarrow_to_region);
|
||||||
defsubr (&Sinternal__label_restriction);
|
defsubr (&Sinternal__labeled_narrow_to_region);
|
||||||
defsubr (&Sinternal__unlabel_restriction);
|
defsubr (&Sinternal__unlabel_restriction);
|
||||||
defsubr (&Ssave_restriction);
|
defsubr (&Ssave_restriction);
|
||||||
defsubr (&Stranspose_regions);
|
defsubr (&Stranspose_regions);
|
||||||
|
|
Loading…
Add table
Reference in a new issue