From 93431df9eb02f7cf3d7f2142bb1bef24c5f325b2 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 15 Jul 2016 20:14:44 +0200 Subject: patch 7.4.2043 Problem: setbuvfar() causes a screen redraw. Solution: Only use aucmd_prepbuf() for options. --- src/eval.c | 18 +++++++++++------- src/version.c | 2 ++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/eval.c b/src/eval.c index 6987485edc..e29ba735a2 100644 --- a/src/eval.c +++ b/src/eval.c @@ -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); } } diff --git a/src/version.c b/src/version.c index e4dd573d84..9acfbe8d40 100644 --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2043, /**/ 2042, /**/ -- cgit v1.2.3