Mercurial > emacs
changeset 14479:69fa625812a4
(adjust_markers): When a marker is inside text
being deleted, call record_marker_adjustment for it.
(del_range_1): Call adjust_markers before record_delete.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 03 Feb 1996 18:06:29 +0000 |
parents | cb600acfe4f6 |
children | 50954bb380b6 |
files | src/insdel.c |
diffstat | 1 files changed, 21 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/insdel.c Sat Feb 03 17:52:47 1996 +0000 +++ b/src/insdel.c Sat Feb 03 18:06:29 1996 +0000 @@ -210,11 +210,16 @@ QUIT; } -/* Add `amount' to the position of every marker in the current buffer - whose current position is between `from' (exclusive) and `to' (inclusive). +/* Add AMOUNT to the position of every marker in the current buffer + whose current position is between FROM (exclusive) and TO (inclusive). + Also, any markers past the outside of that interval, in the direction of adjustment, are first moved back to the near end of the interval - and then adjusted by `amount'. */ + and then adjusted by AMOUNT. + + When the latter adjustment is done, if AMOUNT is negative, + we record the adjustment for undo. (This case happens only for + deletion.) */ static void adjust_markers (from, to, amount) @@ -237,8 +242,14 @@ } else { + /* Here's the case where a marker is inside text being deleted. + AMOUNT can be negative for gap motion, too, + but then this range contains no markers. */ if (mpos > from + amount && mpos <= from) - mpos = from + amount; + { + record_marker_adjustment (marker, from + amount - mpos); + mpos = from + amount; + } } if (mpos > from && mpos <= to) mpos += amount; @@ -655,6 +666,12 @@ if (prepare) prepare_to_modify_buffer (from, to); + /* Relocate all markers pointing into the new, larger gap + to point at the end of the text before the gap. + This has to be done before recording the deletion, + so undo handles this after reinserting the text. */ + adjust_markers (to + GAP_SIZE, to + GAP_SIZE, - numdel - GAP_SIZE); + record_delete (from, numdel); MODIFF++; @@ -665,10 +682,6 @@ /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ offset_intervals (current_buffer, from, - numdel); - /* Relocate all markers pointing into the new, larger gap - to point at the end of the text before the gap. */ - adjust_markers (to + GAP_SIZE, to + GAP_SIZE, - numdel - GAP_SIZE); - /* Adjust the overlay center as needed. This must be done after adjusting the markers that bound the overlays. */ adjust_overlays_for_delete (from, numdel);