diff src/diff.c @ 764:986753bbc441

updated for version 7.0225
author vimboss
date Wed, 15 Mar 2006 22:50:30 +0000
parents 5c9e7c6e6e2e
children 23f82b5d2814
line wrap: on
line diff
--- a/src/diff.c
+++ b/src/diff.c
@@ -21,6 +21,8 @@ static int	diff_busy = FALSE;	/* ex_diff
 #define DIFF_FILLER	1	/* display filler lines */
 #define DIFF_ICASE	2	/* ignore case */
 #define DIFF_IWHITE	4	/* ignore change in white space */
+#define DIFF_HORIZONTAL	8	/* horizontal splits */
+#define DIFF_VERTICAL	16	/* vertical splits */
 static int	diff_flags = DIFF_FILLER;
 
 #define LBUFLEN 50		/* length of line in diff file */
@@ -977,7 +979,7 @@ ex_diffpatch(eap)
     /* don't use a new tab page, each tab page has its own diffs */
     cmdmod.tab = 0;
 
-    if (win_split(0, 0) != FAIL)
+    if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL)
     {
 	/* Pretend it was a ":split fname" command */
 	eap->cmdidx = CMD_split;
@@ -1037,7 +1039,7 @@ ex_diffsplit(eap)
     /* don't use a new tab page, each tab page has its own diffs */
     cmdmod.tab = 0;
 
-    if (win_split(0, 0) != FAIL)
+    if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL)
     {
 	/* Pretend it was a ":split fname" command */
 	eap->cmdidx = CMD_split;
@@ -1086,7 +1088,7 @@ diff_win_options(wp, addbuf)
 						       OPT_LOCAL|OPT_FREE, 0);
 	curwin = old_curwin;
 	curbuf = curwin->w_buffer;
-	wp->w_p_fdc = 2;
+	wp->w_p_fdc = diff_foldcolumn;
 	wp->w_p_fen = TRUE;
 	wp->w_p_fdl = 0;
 	foldUpdateAll(wp);
@@ -1700,6 +1702,7 @@ diffopt_changed()
     char_u	*p;
     int		diff_context_new = 6;
     int		diff_flags_new = 0;
+    int		diff_foldcolumn_new = 2;
     tabpage_T	*tp;
 
     p = p_dip;
@@ -1725,12 +1728,31 @@ diffopt_changed()
 	    p += 6;
 	    diff_flags_new |= DIFF_IWHITE;
 	}
+	else if (STRNCMP(p, "horizontal", 10) == 0)
+	{
+	    p += 10;
+	    diff_flags_new |= DIFF_HORIZONTAL;
+	}
+	else if (STRNCMP(p, "vertical", 8) == 0)
+	{
+	    p += 8;
+	    diff_flags_new |= DIFF_VERTICAL;
+	}
+	else if (STRNCMP(p, "foldcolumn:", 11) == 0 && VIM_ISDIGIT(p[11]))
+	{
+	    p += 11;
+	    diff_foldcolumn_new = getdigits(&p);
+	}
 	if (*p != ',' && *p != NUL)
 	    return FAIL;
 	if (*p == ',')
 	    ++p;
     }
 
+    /* Can't have both "horizontal" and "vertical". */
+    if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & DIFF_VERTICAL))
+	return FAIL;
+
     /* If "icase" or "iwhite" was added or removed, need to update the diff. */
     if (diff_flags != diff_flags_new)
 	for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
@@ -1738,6 +1760,7 @@ diffopt_changed()
 
     diff_flags = diff_flags_new;
     diff_context = diff_context_new;
+    diff_foldcolumn = diff_foldcolumn_new;
 
     diff_redraw(TRUE);
 
@@ -1749,6 +1772,15 @@ diffopt_changed()
 }
 
 /*
+ * Return TRUE if 'diffopt' contains "horizontal".
+ */
+    int
+diffopt_horizontal()
+{
+    return (diff_flags & DIFF_HORIZONTAL) != 0;
+}
+
+/*
  * Find the difference within a changed line.
  * Returns TRUE if the line was added, no other buffer has it.
  */