register int nchars, nbytes;
int inherit, prepare, before_markers;
{
- register Lisp_Object temp;
+ register Lisp_Object temp, deletion;
int combined_before_bytes, combined_after_bytes;
if (NILP (current_buffer->enable_multibyte_characters))
if (combined_after_bytes)
{
+ deletion = make_buffer_string_both (PT, PT_BYTE,
+ PT + combined_after_bytes,
+ PT_BYTE + combined_after_bytes, 1);
+
adjust_markers_for_record_delete (PT, PT_BYTE,
PT + combined_after_bytes,
PT_BYTE + combined_after_bytes);
- record_delete (PT, combined_after_bytes);
+ record_delete (PT, deletion);
}
if (combined_before_bytes)
{
+ deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1),
+ PT, PT_BYTE, 1);
adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
PT, PT_BYTE);
- record_delete (PT - 1, 1);
+ record_delete (PT - 1, deletion);
}
record_insert (PT - !!combined_before_bytes,
int combined_before_bytes, combined_after_bytes;
int adjusted_nchars;
INTERVAL intervals;
+ Lisp_Object deletion;
/* Make OUTGOING_NBYTES describe the text
as it will be inserted in this buffer. */
if (combined_after_bytes)
{
+ deletion = make_buffer_string_both (PT, PT_BYTE,
+ PT + combined_after_bytes,
+ PT_BYTE + combined_after_bytes, 1);
+
adjust_markers_for_record_delete (PT, PT_BYTE,
PT + combined_after_bytes,
PT_BYTE + combined_after_bytes);
- record_delete (PT, combined_after_bytes);
+ record_delete (PT, deletion);
}
if (combined_before_bytes)
{
+ deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1),
+ PT, PT_BYTE, 1);
adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
PT, PT_BYTE);
- record_delete (PT - 1, 1);
+ record_delete (PT - 1, deletion);
}
record_insert (PT - !!combined_before_bytes,
int from, nchars;
int inherit;
{
- register Lisp_Object temp;
+ register Lisp_Object temp, deletion;
int chunk;
int from_byte = buf_charpos_to_bytepos (buf, from);
int to_byte = buf_charpos_to_bytepos (buf, from + nchars);
if (combined_after_bytes)
{
+ deletion = make_buffer_string_both (PT, PT_BYTE,
+ PT + combined_after_bytes,
+ PT_BYTE + combined_after_bytes, 1);
+
adjust_markers_for_record_delete (PT, PT_BYTE,
PT + combined_after_bytes,
PT_BYTE + combined_after_bytes);
- record_delete (PT, combined_after_bytes);
+ record_delete (PT, deletion);
}
if (combined_before_bytes)
{
+ deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1),
+ PT, PT_BYTE, 1);
adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
PT, PT_BYTE);
- record_delete (PT - 1, 1);
+ record_delete (PT - 1, deletion);
}
record_insert (PT - !!combined_before_bytes,
adjust_before_replace (from, from_byte, to, to_byte)
int from, from_byte, to, to_byte;
{
+ Lisp_Object deletion;
+ deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
+
adjust_markers_for_delete (from, from_byte, to, to_byte);
- record_delete (from, to - from);
+ record_delete (from, deletion);
adjust_overlays_for_delete (from, to - from);
}
= count_combining_before (GPT_ADDR, len_byte, from, from_byte);
int combined_after_bytes
= count_combining_after (GPT_ADDR, len_byte, from, from_byte);
+ Lisp_Object deletion;
if (combined_after_bytes)
{
+ deletion = make_buffer_string_both (from, from_byte,
+ from + combined_after_bytes,
+ from_byte + combined_after_bytes, 1);
+
adjust_markers_for_record_delete (from, from_byte,
from + combined_after_bytes,
from_byte + combined_after_bytes);
- record_delete (from, combined_after_bytes);
+ record_delete (from, deletion);
}
if (combined_before_bytes)
{
+ deletion = make_buffer_string_both (from - 1, CHAR_TO_BYTE (from - 1),
+ from, from_byte, 1);
adjust_markers_for_record_delete (from - 1, CHAR_TO_BYTE (from - 1),
from, from_byte);
- record_delete (from - 1, 1);
+ record_delete (from - 1, deletion);
}
/* Update various buffer positions for the new text. */
int adjusted_inschars;
INTERVAL intervals;
int outgoing_insbytes = insbytes;
+ Lisp_Object deletion;
GCPRO1 (new);
if (to < GPT)
gap_left (to, to_byte, 0);
+ deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
+
/* Relocate all markers pointing into the new, larger gap
to point at the end of the text before the gap.
Do this before recording the deletion,
so that undo handles this after reinserting the text. */
adjust_markers_for_delete (from, from_byte, to, to_byte);
- record_delete (from, nchars_del);
+ record_delete (from, deletion);
GAP_SIZE += nbytes_del;
ZV -= nchars_del;
if (combined_after_bytes)
{
+ deletion = make_buffer_string_both (PT, PT_BYTE,
+ PT + combined_after_bytes,
+ PT_BYTE + combined_after_bytes, 1);
+
adjust_markers_for_record_delete (PT, PT_BYTE,
PT + combined_after_bytes,
PT_BYTE + combined_after_bytes);
- record_delete (PT, combined_after_bytes);
+ record_delete (PT, deletion);
}
if (combined_before_bytes)
{
+ deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1),
+ PT, PT_BYTE, 1);
adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
PT, PT_BYTE);
- record_delete (PT - 1, 1);
+ record_delete (PT - 1, deletion);
}
record_insert (PT - !!combined_before_bytes,
{
register int nbytes_del, nchars_del;
int combined_after_bytes;
+ Lisp_Object deletion;
+ int from_byte_1;
nchars_del = to - from;
nbytes_del = to_byte - from_byte;
combined_after_bytes
= count_combining_before (BUF_BYTE_ADDRESS (current_buffer, to_byte),
ZV_BYTE - to_byte, from, from_byte);
+ if (combined_after_bytes)
+ {
+ from_byte_1 = from_byte;
+ DEC_POS (from_byte_1);
+ }
+ else
+ from_byte_1 = from_byte;
+
+ deletion
+ = make_buffer_string_both (from - !!combined_after_bytes,
+ from_byte_1,
+ to + combined_after_bytes,
+ to_byte + combined_after_bytes, 1);
/* Relocate all markers pointing into the new, larger gap
to point at the end of the text before the gap.
adjust_markers_for_delete (from, from_byte, to, to_byte);
if (combined_after_bytes)
{
- int from_byte_1 = from_byte;
- DEC_POS (from_byte_1);
-
/* Adjust markers for the phony deletion
that we are about to call record_undo for. */
adjust_markers_for_record_delete (from - 1, from_byte_1,
from, from_byte);
}
- record_delete (from - !!combined_after_bytes,
- nchars_del + combined_after_bytes + !!combined_after_bytes);
+ record_delete (from - !!combined_after_bytes, deletion);
if (combined_after_bytes)
/* COMBINED_AFTER_BYTES nonzero means that the above record_delete