changeset 7109:d4842450463c

(adjust_point): New function. (insert_1, insert_from_string_1, del_range_1): Use it.
author Karl Heuer <kwzh@gnu.org>
date Tue, 26 Apr 1994 02:22:52 +0000
parents 6e6410985d76
children ea2aef9d9f0e
files src/insdel.c
diffstat 1 files changed, 17 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/insdel.c	Tue Apr 26 02:11:35 1994 +0000
+++ b/src/insdel.c	Tue Apr 26 02:22:52 1994 +0000
@@ -30,6 +30,7 @@
 static void gap_left ();
 static void gap_right ();
 static void adjust_markers ();
+static void adjust_point ();
 
 /* Move gap to position `pos'.
    Note that this can quit!  */
@@ -241,6 +242,19 @@
       marker = m->chain;
     }
 }
+
+/* Add the specified amount to point.  This is used only when the value
+   of point changes due to an insert or delete; it does not represent
+   a conceptual change in point as a marker.  In particular, point is
+   not crossing any interval boundaries, so there's no need to use the
+   usual SET_PT macro.  In fact it would be incorrect to do so, because
+   either the old or the new value of point is out of synch with the
+   current set of intervals.  */
+static void
+adjust_point (amount)
+{
+  current_buffer->text.pt += amount;
+}
 
 /* Make the gap INCREMENT characters longer.  */
 
@@ -331,7 +345,7 @@
   GPT += length;
   ZV += length;
   Z += length;
-  SET_PT (PT + length);
+  adjust_point (length);
 }
 
 /* Insert the part of the text of STRING, a Lisp object assumed to be
@@ -395,7 +409,7 @@
   graft_intervals_into_buffer (XSTRING (string)->intervals, PT, length,
 			       current_buffer, inherit);
 
-  SET_PT (PT + length);
+  adjust_point (length);
 }
 
 /* Insert the character C before point */
@@ -489,12 +503,7 @@
 
   /* Relocate point as if it were a marker.  */
   if (from < PT)
-    {
-      if (PT < to)
-	SET_PT (from);
-      else
-	SET_PT (PT - numdel);
-    }
+    adjust_point (from - (PT < to ? PT : to));
 
   /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
   offset_intervals (current_buffer, from, - numdel);