diff src/diff.c @ 648:9032e4668296 v7.0189

updated for version 7.0189
author vimboss
date Mon, 30 Jan 2006 00:14:18 +0000
parents 593092a5362b
children 83a006f81bac
line wrap: on
line diff
--- a/src/diff.c
+++ b/src/diff.c
@@ -1893,6 +1893,7 @@ ex_diffgetput(eap)
     buf_T	*buf;
     int		start_skip, end_skip;
     int		new_count;
+    int		buf_empty;
 
     /* Find the current buffer in the list of diff buffers. */
     idx_cur = diff_buf_idx(curbuf);
@@ -2047,9 +2048,12 @@ ex_diffgetput(eap)
 		    end_skip = 0;
 	    }
 
+	    buf_empty = FALSE;
 	    added = 0;
 	    for (i = 0; i < count; ++i)
 	    {
+		/* remember deleting the last line of the buffer */
+		buf_empty = curbuf->b_ml.ml_line_count == 1;
 		ml_delete(lnum, FALSE);
 		--added;
 	    }
@@ -2066,6 +2070,13 @@ ex_diffgetput(eap)
 		    ml_append(lnum + i - 1, p, 0, FALSE);
 		    vim_free(p);
 		    ++added;
+		    if (buf_empty && curbuf->b_ml.ml_line_count == 2)
+		    {
+			/* Added the first line into an empty buffer, need to
+			 * delete the dummy empty line. */
+			buf_empty = FALSE;
+			ml_delete((linenr_T)2, FALSE);
+		    }
 		}
 	    }
 	    new_count = dp->df_count[idx_to] + added;