Mercurial > emacs
changeset 29065:e8d5eb064973
(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.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Mon, 22 May 2000 00:19:43 +0000 |
parents | 0898c6fbd3be |
children | 720287a2312f |
files | src/insdel.c |
diffstat | 1 files changed, 12 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- 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)) {