# HG changeset patch # User Kenichi Handa # Date 958954783 0 # Node ID e8d5eb0649731bcf93d7c29cad97c81f17f78723 # Parent 0898c6fbd3bef760cc4729b4f937b754bdac4338 (adjust_markers_for_replace): Fix previous change. (adjust_after_replace): If PREV_TEXT is nil, call adjust_markers_for_insert, not adjust_markers_for_replace. diff -r 0898c6fbd3be -r e8d5eb064973 src/insdel.c --- a/src/insdel.c Mon May 22 00:19:18 2000 +0000 +++ b/src/insdel.c Mon May 22 00:19:43 2000 +0000 @@ -462,7 +462,8 @@ /* Adjust markers for a replacement of a text at FROM (FROM_BYTE) of length OLD_CHARS (OLD_BYTES) to a new text of length NEW_CHARS - (NEW_BYTES). */ + (NEW_BYTES). It is assumed that OLD_CHARS > 0, i.e., this is not + an insertion. */ static void adjust_markers_for_replace (from, from_byte, old_chars, old_bytes, @@ -478,17 +479,12 @@ { register struct Lisp_Marker *m = XMARKER (marker); - if (m->bytepos >= prev_to_byte - && (old_bytes != 0 - /* If this is an insertion (replacing 0 chars), - reject the case of a marker that is at the - insertion point and should stay before the insertion. */ - || m->bytepos > from_byte || m->insertion_type)) + if (m->bytepos >= prev_to_byte) { - m->charpos = min (from + new_chars, m->charpos + diff_chars); - m->bytepos = min (from_byte + new_bytes, m->bytepos + diff_bytes); + m->charpos += diff_chars; + m->bytepos += diff_bytes; } - else if (m->bytepos >= from_byte) + else if (m->bytepos > from_byte) { m->charpos = from; m->bytepos = from_byte; @@ -1277,8 +1273,12 @@ GPT += len; GPT_BYTE += len_byte; if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ - adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del, - len, len_byte); + if (nchars_del > 0) + adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del, + len, len_byte); + else + adjust_markers_for_insert (from, from_byte, + from + len, from_byte + len_byte, 0); if (! EQ (current_buffer->undo_list, Qt)) {