diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/buffer.c | 9 | ||||
| -rw-r--r-- | src/nvim/eval.c | 74 | ||||
| -rw-r--r-- | src/nvim/ex_cmds.c | 1 | ||||
| -rw-r--r-- | src/nvim/option.c | 2 | ||||
| -rw-r--r-- | src/nvim/testdir/Makefile | 1 | ||||
| -rw-r--r-- | src/nvim/testdir/test_charsearch.in | 25 | ||||
| -rw-r--r-- | src/nvim/testdir/test_charsearch.ok | 3 | ||||
| -rw-r--r-- | src/nvim/version.c | 8 | 
8 files changed, 56 insertions, 67 deletions
| diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 9806623433..c05090bbf6 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -1741,12 +1741,15 @@ int buflist_findpat(    int toggledollar;    if (pattern_end == pattern + 1 && (*pattern == '%' || *pattern == '#')) { -    if (*pattern == '%') +    if (*pattern == '%') {        match = curbuf->b_fnum; -    else +    } else {        match = curwin->w_alt_fnum; -    if (diffmode && !diff_mode_buf(buflist_findnr(match))) +    } +    buf_T *found_buf = buflist_findnr(match); +    if (diffmode && !(found_buf && diff_mode_buf(found_buf))) {        match = -1; +    }    }    /*     * Try four ways of matching a listed buffer: diff --git a/src/nvim/eval.c b/src/nvim/eval.c index ec085efc07..837e19ab98 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -10698,11 +10698,11 @@ getwinvar (      int off                    /* 1 for gettabwinvar() */  )  { -  win_T       *win, *oldcurwin; -  char_u      *varname; -  dictitem_T  *v; -  tabpage_T   *tp = NULL; -  tabpage_T   *oldtabpage = NULL; +  win_T *win, *oldcurwin; +  char_u *varname; +  dictitem_T *v; +  tabpage_T *tp = NULL; +  tabpage_T *oldtabpage = NULL;    bool done = false;    if (off == 1) @@ -10717,12 +10717,16 @@ getwinvar (    rettv->vval.v_string = NULL;    if (win != NULL && varname != NULL) { -    /* Set curwin to be our win, temporarily.  Also set the tabpage, -     * otherwise the window is not valid. */ -    if (switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE) == OK) { -      if (*varname == '&') {      /* window-local-option */ -        if (get_option_tv(&varname, rettv, 1) == OK) +    // Set curwin to be our win, temporarily.  Also set the tabpage, +    // otherwise the window is not valid. Only do this when needed, +    // autocommands get blocked. +    bool need_switch_win = tp != curtab || win != curwin; +    if (!need_switch_win +        || switch_win(&oldcurwin, &oldtabpage, win, tp, true) == OK) { +      if (*varname == '&') {  // window-local-option +        if (get_option_tv(&varname, rettv, 1) == OK) {            done = true; +        }        } else {          // Look up the variable.          // Let getwinvar({nr}, "") return the "w:" dictionary. @@ -10734,8 +10738,10 @@ getwinvar (        }      } -    /* restore previous notion of curwin */ -    restore_win(oldcurwin, oldtabpage, TRUE); +    if (need_switch_win) { +      // restore previous notion of curwin +      restore_win(oldcurwin, oldtabpage, true); +    }    }    if (!done && argvars[off + 2].v_type != VAR_UNKNOWN) @@ -15560,26 +15566,32 @@ static void setwinvar(typval_T *argvars, typval_T *rettv, int off)    varname = get_tv_string_chk(&argvars[off + 1]);    varp = &argvars[off + 2]; -  if (win != NULL && varname != NULL && varp != NULL -      && switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == OK) { -    if (*varname == '&') { -      long numval; -      char_u      *strval; -      int error = FALSE; - -      ++varname; -      numval = 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); -    } else { -      winvarname = xmalloc(STRLEN(varname) + 3); -      STRCPY(winvarname, "w:"); -      STRCPY(winvarname + 2, varname); -      set_var(winvarname, varp, TRUE); -      xfree(winvarname); +  if (win != NULL && varname != NULL && varp != NULL) { +    bool need_switch_win = tp != curtab || win != curwin; +    if (!need_switch_win +        || switch_win(&save_curwin, &save_curtab, win, tp, true) == OK) { +      if (*varname == '&') { +        long numval; +        char_u *strval; +        int error = false; + +        ++varname; +        numval = 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); +        } +      } else { +        winvarname = xmalloc(STRLEN(varname) + 3); +        STRCPY(winvarname, "w:"); +        STRCPY(winvarname + 2, varname); +        set_var(winvarname, varp, true); +        xfree(winvarname); +      } +    } +    if (need_switch_win) { +      restore_win(save_curwin, save_curtab, true);      } -    restore_win(save_curwin, save_curtab, TRUE);    }  } diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 4d62dd0ff9..4a423269cc 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -4779,6 +4779,7 @@ void ex_helptags(exarg_T *eap)        WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);    if (dirname == NULL || !os_isdir(dirname)) {      EMSG2(_("E150: Not a directory: %s"), eap->arg); +    xfree(dirname);      return;    } diff --git a/src/nvim/option.c b/src/nvim/option.c index 4bf7ec5405..0f6874e941 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -2077,7 +2077,7 @@ static void didset_options2(void)    (void)highlight_changed();    // Parse default for 'clipboard'. -  opt_strings_flags(p_cb, p_cb_values, &cb_flags, true); +  (void)opt_strings_flags(p_cb, p_cb_values, &cb_flags, true);    // Parse default for 'fillchars'.    (void)set_chars_option(&p_fcs); diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile index f077414e18..9dd18ab63e 100644 --- a/src/nvim/testdir/Makefile +++ b/src/nvim/testdir/Makefile @@ -25,7 +25,6 @@ SCRIPTS :=                                                             \                                     test88.out                          \             test_listlbr.out                                            \             test_breakindent.out                                        \ -           test_charsearch.out                                         \             test_close_count.out                                        \             test_marks.out                                              \             test_match_conceal.out                                      \ diff --git a/src/nvim/testdir/test_charsearch.in b/src/nvim/testdir/test_charsearch.in deleted file mode 100644 index 5085cb39bc..0000000000 --- a/src/nvim/testdir/test_charsearch.in +++ /dev/null @@ -1,25 +0,0 @@ -Test for character searches - -STARTTEST -:so small.vim -:" check that "fe" and ";" work -/^X -ylfep;;p,,p: -:" check that save/restore works -/^Y -ylfep:let csave = getcharsearch() -fip:call setcharsearch(csave) -;p;p: -:" check that setcharsearch() changes the settins. -/^Z -ylfep:call setcharsearch({'char': 'k'}) -;p:call setcharsearch({'forward': 0}) -$;p:call setcharseearch({'until'}: 1}) -;;p: -:/^X/,$w! test.out -:qa! -ENDTEST - -Xabcdefghijkemnopqretuvwxyz -Yabcdefghijkemnopqretuvwxyz -Zabcdefghijkemnokqretkvwxyz diff --git a/src/nvim/testdir/test_charsearch.ok b/src/nvim/testdir/test_charsearch.ok deleted file mode 100644 index a0c90e24f9..0000000000 --- a/src/nvim/testdir/test_charsearch.ok +++ /dev/null @@ -1,3 +0,0 @@ -XabcdeXfghijkeXmnopqreXtuvwxyz -YabcdeYfghiYjkeYmnopqreYtuvwxyz -ZabcdeZfghijkZemnokZqretkZvwxyz diff --git a/src/nvim/version.c b/src/nvim/version.c index 39b8e3db84..7d4b8982cd 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -69,6 +69,8 @@ static char *features[] = {  // clang-format off  static int included_patches[] = { +  1366, +    // 1219 NA    // 1218 NA    // 1217 NA @@ -247,7 +249,7 @@ static int included_patches[] = {    // 1044 NA,    // 1043 NA,    // 1042, -  // 1041, +  1041,    // 1040 NA,    // 1039,    // 1038 NA, @@ -366,7 +368,7 @@ static int included_patches[] = {    // 925,    // 924 NA    // 923 NA -  // 922, +  922,    // 921 NA    // 920 NA    // 919 NA @@ -400,7 +402,7 @@ static int included_patches[] = {    // 891,    // 890 NA    // 889, -  // 888, +  888,    887,    // 886 NA    885, | 
