than the current one.
* insdel.c (modify_region): New argument BUFFER. Select that
buffer while we prepare for the modification, and switch back when
we're done.
* textprop.c (add_properties, remove_properties): Pass
the buffer being modified as the first argument to modify_region.
* editfns.c (Fsubst_char_in_region, Ftranslate_region): Pass the
current_buffer as the first argument to modify_region.
* casefiddle.c (casify_region): Same.
return;
validate_region (&b, &e);
- modify_region (XFASTINT (b), XFASTINT (e));
- record_change (XFASTINT (b), XFASTINT (e) - XFASTINT (b));
+ modify_region (current_buffer, XFASTINT (b), XFASTINT (e));
+ record_change (current_buffer, XFASTINT (b), XFASTINT (e) - XFASTINT (b));
for (i = XFASTINT (b); i < XFASTINT (e); i++)
{
stop = XINT (end);
look = XINT (fromchar);
- modify_region (pos, stop);
+ modify_region (current_buffer, pos, stop);
if (! NILP (noundo))
{
if (MODIFF - 1 == current_buffer->save_modified)
pos = XINT (start);
stop = XINT (end);
- modify_region (pos, stop);
+ modify_region (current_buffer, pos, stop);
cnt = 0;
for (; pos < stop; ++pos)
signal_after_change (from, numdel, 0);
}
\f
-modify_region (start, end)
+/* Call this if you're about to change the region of BUFFER from START
+ to END. This checks the read-only properties of the region, calls
+ the necessary modification hooks, and warns the next redisplay that
+ it should pay attention to that area. */
+modify_region (buffer, start, end)
+ struct buffer *buffer;
int start, end;
{
+ struct buffer *old_buffer = current_buffer;
+
+ if (buffer != old_buffer)
+ set_buffer_internal (buffer);
+
prepare_to_modify_buffer (start, end);
if (start - 1 < beg_unchanged || unchanged_modified == MODIFF)
|| unchanged_modified == MODIFF)
end_unchanged = Z - end;
MODIFF++;
+
+ if (buffer != old_buffer)
+ set_buffer_internal (old_buffer);
}
/* Check that it is okay to modify the buffer between START and END.
{
record_property_change (i->position, LENGTH (i),
sym1, Fcar (this_cdr), object);
- modify_region (make_number (i->position),
+ modify_region (XBUFFER (object),
+ make_number (i->position),
make_number (i->position + LENGTH (i)));
}
{
record_property_change (i->position, LENGTH (i),
sym1, Qnil, object);
- modify_region (make_number (i->position),
+ modify_region (XBUFFER (object),
+ make_number (i->position),
make_number (i->position + LENGTH (i)));
}
i->plist = Fcons (sym1, Fcons (val1, i->plist));
record_property_change (i->position, LENGTH (i),
sym, Fcar (Fcdr (current_plist)),
object);
- modify_region (make_number (i->position),
+ modify_region (XBUFFER (object),
+ make_number (i->position),
make_number (i->position + LENGTH (i)));
}
{
record_property_change (i->position, LENGTH (i),
sym, Fcar (Fcdr (this)), object);
- modify_region (make_number (i->position),
+ modify_region (XBUFFER (object),
+ make_number (i->position),
make_number (i->position + LENGTH (i)));
}