diff src/eval.c @ 32:41f9fd58cf13 v7.0019

updated for version 7.0019
author vimboss
date Tue, 12 Oct 2004 20:02:24 +0000
parents ac33b7c03fac
children 7f788cd27415
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -274,6 +274,8 @@ static void f_cscope_connection __ARGS((
 static void f_cursor __ARGS((VAR argsvars, VAR retvar));
 static void f_delete __ARGS((VAR argvars, VAR retvar));
 static void f_did_filetype __ARGS((VAR argvars, VAR retvar));
+static void f_diff_filler __ARGS((VAR argvars, VAR retvar));
+static void f_diff_hlID __ARGS((VAR argvars, VAR retvar));
 static void f_escape __ARGS((VAR argvars, VAR retvar));
 static void f_eventhandler __ARGS((VAR argvars, VAR retvar));
 static void f_executable __ARGS((VAR argvars, VAR retvar));
@@ -2837,6 +2839,8 @@ static struct fst
     {"cursor",		2, 2, f_cursor},
     {"delete",		1, 1, f_delete},
     {"did_filetype",	0, 0, f_did_filetype},
+    {"diff_filler",	1, 1, f_diff_filler},
+    {"diff_hlID",	2, 2, f_diff_hlID},
     {"escape",		2, 2, f_escape},
     {"eventhandler",	0, 0, f_eventhandler},
     {"executable",	1, 1, f_executable},
@@ -3977,6 +3981,79 @@ f_did_filetype(argvars, retvar)
 }
 
 /*
+ * "diff_filler()" function
+ */
+/*ARGSUSED*/
+    static void
+f_diff_filler(argvars, retvar)
+    VAR		argvars;
+    VAR		retvar;
+{
+#ifdef FEAT_DIFF
+    retvar->var_val.var_number = diff_check_fill(curwin, get_var_lnum(argvars));
+#endif
+}
+
+/*
+ * "diff_hlID()" function
+ */
+/*ARGSUSED*/
+    static void
+f_diff_hlID(argvars, retvar)
+    VAR		argvars;
+    VAR		retvar;
+{
+#ifdef FEAT_DIFF
+    linenr_T		lnum = get_var_lnum(argvars);
+    static linenr_T	prev_lnum = 0;
+    static int		changedtick = 0;
+    static int		fnum = 0;
+    static int		change_start = 0;
+    static int		change_end = 0;
+    static enum hlf_value hlID = 0;
+    int			filler_lines;
+    int			col;
+
+    if (lnum != prev_lnum
+	    || changedtick != curbuf->b_changedtick
+	    || fnum != curbuf->b_fnum)
+    {
+	/* New line, buffer, change: need to get the values. */
+	filler_lines = diff_check(curwin, lnum);
+	if (filler_lines < 0)
+	{
+	    if (filler_lines == -1)
+	    {
+		change_start = MAXCOL;
+		change_end = -1;
+		if (diff_find_change(curwin, lnum, &change_start, &change_end))
+		    hlID = HLF_ADD;	/* added line */
+		else
+		    hlID = HLF_CHD;	/* changed line */
+	    }
+	    else
+		hlID = HLF_ADD;	/* added line */
+	}
+	else
+	    hlID = (enum hlf_value)0;
+	prev_lnum = lnum;
+	changedtick = curbuf->b_changedtick;
+	fnum = curbuf->b_fnum;
+    }
+
+    if (hlID == HLF_CHD || hlID == HLF_TXD)
+    {
+	col = get_var_number(&argvars[1]) - 1;
+	if (col >= change_start && col <= change_end)
+	    hlID = HLF_TXD;			/* changed text */
+	else
+	    hlID = HLF_CHD;			/* changed line */
+    }
+    retvar->var_val.var_number = hlID == (enum hlf_value)0 ? 0 : (int)hlID;
+#endif
+}
+
+/*
  * "escape({string}, {chars})" function
  */
     static void