emacs-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]