]> git.wh0rd.org Git - nano.git/commitdiff
More wrapping redo fixes. Just make do-wrap() undo aware.
authorChris Allegretta <chrisa@asty.org>
Wed, 29 Apr 2009 22:34:27 +0000 (22:34 +0000)
committerChris Allegretta <chrisa@asty.org>
Wed, 29 Apr 2009 22:34:27 +0000 (22:34 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4394 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

src/nano.c
src/proto.h
src/text.c

index 19a81cd0a6385497b147754ce79c9757707db178..8f03bd5b0e0a95cd82ce9250ef16e49205ed793c 100644 (file)
@@ -1909,7 +1909,7 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
        if (!ISSET(NO_WRAP)) {
            bool do_refresh_save = do_refresh;
 
-           do_refresh = do_wrap(openfile->current);
+           do_refresh = do_wrap(openfile->current, FALSE);
 
            /* If we needed to call edit_refresh() before this, we'll
             * still need to after this. */
index 752bb1e42956a22a79f8c76f5fe9c5f7ca71326d..94866cb518a92adc305b229cd4e06c5404fb3d3b 100644 (file)
@@ -631,7 +631,7 @@ bool execute_command(const char *command);
 #endif
 #ifndef DISABLE_WRAPPING
 void wrap_reset(void);
-bool do_wrap(filestruct *line);
+bool do_wrap(filestruct *line, bool undoing);
 #endif
 #if !defined(DISABLE_HELP) || !defined(DISABLE_WRAPJUSTIFY)
 ssize_t break_line(const char *line, ssize_t goal
index e7131fe4d8a2a1f44c13b33ef91a207548cd23e5..363000663a04defeb9d2442f39bf6d7671a9e37c 100644 (file)
@@ -612,16 +612,9 @@ void do_redo(void)
        break;
     case SPLIT:
        undidmsg = _("line wrap");
-       data = mallocstrncpy(NULL, f->data, u->begin);
-       data[u->begin] = '\0';
-       free(f->data);
-       f->data = data;
-        if (u->strdata2 == NULL) {
-           t = make_new_node(f);
-           t->data = mallocstrcpy(NULL, u->strdata);
-           splice_node(f, t, f->next);
-       } else
-           f->next->data = mallocstrcpy(f->next->data, u->strdata2);
+       if (u->xflags & UNDO_SPLIT_MADENEW)
+           prepend_wrap = TRUE;
+        do_wrap(f, TRUE);
        renumber(f);
        break;
     case UNSPLIT:
@@ -970,7 +963,7 @@ void update_undo(undo_type action)
     /* Change to an add if we're not using the same undo struct
        that we should be using */
     if (action != fs->last_action
-       || (action != CUT && action != INSERT
+       || (action != CUT && action != INSERT && action != SPLIT
            && openfile->current->lineno != fs->current_undo->lineno)) {
         add_undo(action);
        return;
@@ -1087,7 +1080,7 @@ void wrap_reset(void)
 /* We wrap the given line.  Precondition: we assume the cursor has been
  * moved forward since the last typed character.  Return TRUE if we
  * wrapped, and FALSE otherwise. */
-bool do_wrap(filestruct *line)
+bool do_wrap(filestruct *line, bool undoing)
 {
     size_t line_len;
        /* The length of the line we wrap. */
@@ -1152,7 +1145,8 @@ bool do_wrap(filestruct *line)
        return FALSE;
 
 #ifndef NANO_TINY
-    add_undo(SPLIT);
+    if (!undoing)
+       add_undo(SPLIT);
 
     /* If autoindent is turned on, and we're on the character just after
      * the indentation, we don't wrap. */
@@ -1248,6 +1242,8 @@ bool do_wrap(filestruct *line)
     null_at(&line->data, wrap_loc);
 
     if (prepending) {
+       if (!undoing)
+           update_undo(SPLIT);
        /* If we're prepending, copy the text from the next line, minus
         * the indentation that we already copied above. */
        strcat(new_line, next_line);