]> granicus.if.org Git - vim/commitdiff
patch 7.4.2043 v7.4.2043
authorBram Moolenaar <Bram@vim.org>
Fri, 15 Jul 2016 18:14:44 +0000 (20:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 15 Jul 2016 18:14:44 +0000 (20:14 +0200)
Problem:    setbuvfar() causes a screen redraw.
Solution:   Only use aucmd_prepbuf() for options.

src/eval.c
src/version.c

index 6987485edcc5157cff4ff6e937ce71b51a23f43e..e29ba735a2818de35e6c05f17cd4a2e967f6c0ea 100644 (file)
@@ -18495,7 +18495,6 @@ f_serverlist(typval_T *argvars UNUSED, typval_T *rettv)
 f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED)
 {
     buf_T      *buf;
-    aco_save_T aco;
     char_u     *varname, *bufvarname;
     typval_T   *varp;
     char_u     nbuf[NUMBUFLEN];
@@ -18509,35 +18508,40 @@ f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED)
 
     if (buf != NULL && varname != NULL && varp != NULL)
     {
-       /* set curbuf to be our buf, temporarily */
-       aucmd_prepbuf(&aco, buf);
-
        if (*varname == '&')
        {
            long        numval;
            char_u      *strval;
            int         error = FALSE;
+           aco_save_T  aco;
+
+           /* set curbuf to be our buf, temporarily */
+           aucmd_prepbuf(&aco, buf);
 
            ++varname;
            numval = (long)get_tv_number_chk(varp, &error);
            strval = get_tv_string_buf_chk(varp, nbuf);
            if (!error && strval != NULL)
                set_option_value(varname, numval, strval, OPT_LOCAL);
+
+           /* reset notion of buffer */
+           aucmd_restbuf(&aco);
        }
        else
        {
+           buf_T *save_curbuf = curbuf;
+
            bufvarname = alloc((unsigned)STRLEN(varname) + 3);
            if (bufvarname != NULL)
            {
+               curbuf = buf;
                STRCPY(bufvarname, "b:");
                STRCPY(bufvarname + 2, varname);
                set_var(bufvarname, varp, TRUE);
                vim_free(bufvarname);
+               curbuf = save_curbuf;
            }
        }
-
-       /* reset notion of buffer */
-       aucmd_restbuf(&aco);
     }
 }
 
index e4dd573d84e16d9f2c4bf566f9f4e420bc2c8f82..9acfbe8d40c0fada8e6353d9090a34b8d63e70db 100644 (file)
@@ -758,6 +758,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2043,
 /**/
     2042,
 /**/