]> git.wh0rd.org Git - nano.git/commitdiff
Skipping the undo of a backspace *only* when it really
authorBenno Schulenberg <bensberg@justemail.net>
Sat, 27 Jun 2015 09:17:36 +0000 (09:17 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Sat, 27 Jun 2015 09:17:36 +0000 (09:17 +0000)
tried to delete the final, magic newline.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5267 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/nano.h
src/text.c

index 31e8f1480e314d832c266e02eeb3df75eac8cdcb..9aed0c14c4366a5bbe8bd05633651c5e95bd2c62 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-06-27  Benno Schulenberg  <bensberg@justemail.net>
+       * src/text.c (do_undo, add_undo): Skip undoing a backspace *only* when
+       it really tried to delete the final, magic newline.
+
 2015-06-23  Benno Schulenberg  <bensberg@justemail.net>
        * src/winio.c (edit_draw): Verify that there exists multidata for the
        found starting line before trying to use it.  When a file is inserted
index 3355b4277cb5d6c5bbd30897db0bff63e23d2087..b31f40bdb00659e2c3b1aa3595401451d2bb6f0c 100644 (file)
@@ -570,7 +570,7 @@ enum
 #define KEY_WINCH -2
 
 /* Some extra bits for the undo function. */
-#define UNdel_backspace                (1<<1)
+#define SKIP_FINAL_BACKSPACE   (1<<1)
 #define UNcut_marked_forward   (1<<2)
 #define UNcut_cutline          (1<<3)
 #endif /* !NANO_TINY */
index 3d3033aa4dfd9ed972f14b60b8fc50fdcc014f86..004ba6b40b2cb6dceb08fe70ec976275c202ca07 100644 (file)
@@ -503,8 +503,7 @@ void do_undo(void)
        undidmsg = _("line join");
        /* When the join was done by a Backspace at the tail of the file,
         * don't actually add another line; just position the cursor. */
-       if (f->next != openfile->filebot || ISSET(NO_NEWLINES) ||
-               u->xflags != UNdel_backspace) {
+       if (ISSET(NO_NEWLINES) || u->xflags != SKIP_FINAL_BACKSPACE) {
            t = make_new_node(f);
            t->data = mallocstrcpy(NULL, u->strdata);
            data = mallocstrncpy(NULL, f->data, u->mark_begin_x + 1);
@@ -936,7 +935,10 @@ void add_undo(undo_type action)
     case ADD:
        break;
     case BACK:
-       u->xflags = UNdel_backspace;
+       /* If the next line is the magic line, don't ever undo this
+        * backspace, as it won't actually have deleted anything. */
+       if (fs->current->next == fs->filebot && fs->current->data[0] != '\0')
+           u->xflags = SKIP_FINAL_BACKSPACE;
     case DEL:
        if (u->begin != strlen(fs->current->data)) {
            char *char_buf = charalloc(mb_cur_max() + 1);