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))
     {