diff src/terminal.c @ 13329:424321d6eea7 v8.0.1539

patch 8.0.1539: no test for the popup menu positioning commit https://github.com/vim/vim/commit/6bb2cdfe604e51eec216cbe23bb6e8fb47810347 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 24 19:53:53 2018 +0100 patch 8.0.1539: no test for the popup menu positioning Problem: No test for the popup menu positioning. Solution: Add a screendump test for the popup menu.
author Christian Brabandt <cb@256bit.org>
date Sat, 24 Feb 2018 20:00:07 +0100
parents 013c44d9dc09
children 73325d39591a
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1829,7 +1829,7 @@ color2index(VTermColor *color, int fg, i
 	switch (color->ansi_index)
 	{
 	    case  0: return 0;
-	    case  1: return lookup_color( 0, fg, boldp) + 1;
+	    case  1: return lookup_color( 0, fg, boldp) + 1; /* black */
 	    case  2: return lookup_color( 4, fg, boldp) + 1; /* dark red */
 	    case  3: return lookup_color( 2, fg, boldp) + 1; /* dark green */
 	    case  4: return lookup_color( 6, fg, boldp) + 1; /* brown */
@@ -2872,7 +2872,7 @@ dump_term_color(FILE *fd, VTermColor *co
 }
 
 /*
- * "term_dumpwrite(buf, filename, max-height, max-width)" function
+ * "term_dumpwrite(buf, filename, options)" function
  *
  * Each screen cell in full is:
  *    |{characters}+{attributes}#{fg-color}{color-idx}#{bg-color}{color-idx}
@@ -2899,8 +2899,8 @@ f_term_dumpwrite(typval_T *argvars, typv
     buf_T	*buf = term_get_buf(argvars);
     term_T	*term;
     char_u	*fname;
-    int		max_height = 99999;
-    int		max_width = 99999;
+    int		max_height = 0;
+    int		max_width = 0;
     stat_T	st;
     FILE	*fd;
     VTermPos	pos;
@@ -2913,6 +2913,23 @@ f_term_dumpwrite(typval_T *argvars, typv
 	return;
     term = buf->b_term;
 
+    if (argvars[2].v_type != VAR_UNKNOWN)
+    {
+	dict_T *d;
+
+	if (argvars[2].v_type != VAR_DICT)
+	{
+	    EMSG(_(e_dictreq));
+	    return;
+	}
+	d = argvars[2].vval.v_dict;
+	if (d != NULL)
+	{
+	    max_height = get_dict_number(d, (char_u *)"rows");
+	    max_width = get_dict_number(d, (char_u *)"columns");
+	}
+    }
+
     fname = get_tv_string_chk(&argvars[1]);
     if (fname == NULL)
 	return;
@@ -2922,13 +2939,6 @@ f_term_dumpwrite(typval_T *argvars, typv
 	return;
     }
 
-    if (argvars[2].v_type != VAR_UNKNOWN)
-    {
-	max_height = get_tv_number(&argvars[2]);
-	if (argvars[3].v_type != VAR_UNKNOWN)
-	    max_width = get_tv_number(&argvars[3]);
-    }
-
     if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL)
     {
 	EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
@@ -2938,13 +2948,13 @@ f_term_dumpwrite(typval_T *argvars, typv
     vim_memset(&prev_cell, 0, sizeof(prev_cell));
 
     screen = vterm_obtain_screen(term->tl_vterm);
-    for (pos.row = 0; pos.row < max_height && pos.row < term->tl_rows;
-								     ++pos.row)
+    for (pos.row = 0; (max_height == 0 || pos.row < max_height)
+					 && pos.row < term->tl_rows; ++pos.row)
     {
 	int		repeat = 0;
 
-	for (pos.col = 0; pos.col < max_width && pos.col < term->tl_cols;
-								     ++pos.col)
+	for (pos.col = 0; (max_width == 0 || pos.col < max_width)
+					 && pos.col < term->tl_cols; ++pos.col)
 	{
 	    VTermScreenCell cell;
 	    int		    same_attr;