[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: undo problems?
From: |
Miles Bader |
Subject: |
Re: undo problems? |
Date: |
Wed, 18 Oct 2000 15:22:45 +0900 (JST) |
I checked in the following change, which seems to fix problem (2):
2000-10-18 Miles Bader <address@hidden>
* insdel.c (adjust_markers_for_delete): Handle before-insertion
markers correctly.
--- insdel.c.~1.151~ Fri Sep 22 09:39:02 2000
+++ insdel.c Wed Oct 18 15:12:30 2000
@@ -1,5 +1,5 @@
/* Buffer insertion/deletion and gap motion for GNU Emacs.
- Copyright (C) 1985, 86,93,94,95,97,98, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1985, 86,93,94,95,97,98, 1999, 2000 Free Software Foundation,
Inc.
This file is part of GNU Emacs.
@@ -370,9 +369,29 @@ adjust_markers_for_delete (from, from_by
/* Here's the case where a marker is inside text being deleted. */
else if (charpos > from)
{
+ if (! m->insertion_type)
+ /* Normal markers will end up at the beginning of the
+ re-inserted text after undoing a deletion, and must be
+ adjusted to move them to the correct place. */
record_marker_adjustment (marker, from - charpos);
+ else if (charpos < to)
+ /* Before-insertion markers will automatically move forward
+ upon re-inserting the deleted text, so we have to arrange
+ for them to move backward to the correct position. */
+ record_marker_adjustment (marker, charpos - to);
+
m->charpos = from;
m->bytepos = from_byte;
+ }
+ /* Here's the case where a before-insertion marker is immediately
+ before the deleted region. */
+ else if (charpos == from && m->insertion_type)
+ {
+ /* Undoing the change uses normal insertion, which will
+ incorrectly make MARKER move forward, so we arrange for it
+ to then move backward to the correct place at the beginning
+ of the deleted region. */
+ record_marker_adjustment (marker, to - from);
}
marker = m->chain;
-Miles
--
Love is a snowmobile racing across the tundra. Suddenly it flips over,
pinning you underneath. At night the ice weasels come. --Nietzsche