Mercurial > emacs
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);