# HG changeset patch # User Karl Heuer # Date 767326972 0 # Node ID d4842450463c56ea3cb48e7cb6e821eb884d5a8c # Parent 6e6410985d76792be3a2af53607b1fc27207c5f7 (adjust_point): New function. (insert_1, insert_from_string_1, del_range_1): Use it. diff -r 6e6410985d76 -r d4842450463c src/insdel.c --- 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);