vim-patch:8.1.0494: functions do not check for a window ID in other tabs

Problem:    Functions do not check for a window ID in other tabs.
Solution:   Also find the window ID in other than the current tab.

babfcf54ae

Fixes https://github.com/neovim/neovim/issues/9843
This commit is contained in:
Marco Hinz
2019-04-03 19:44:54 +02:00
parent 5510361a8c
commit d608e9c950

View File

@@ -10076,7 +10076,7 @@ static void get_qf_loc_list(int is_qf, win_T *wp, typval_T *what_arg,
/// "getloclist()" function /// "getloclist()" function
static void f_getloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_getloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{ {
win_T *wp = find_win_by_nr(&argvars[0], NULL); win_T *wp = find_win_by_nr_or_id(&argvars[0]);
get_qf_loc_list(false, wp, &argvars[1], rettv); get_qf_loc_list(false, wp, &argvars[1], rettv);
} }
@@ -10447,7 +10447,7 @@ static void f_getwininfo(typval_T *argvars, typval_T *rettv, FunPtr fptr)
static void f_win_screenpos(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_win_screenpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{ {
tv_list_alloc_ret(rettv, 2); tv_list_alloc_ret(rettv, 2);
const win_T *const wp = find_win_by_nr(&argvars[0], NULL); const win_T *const wp = find_win_by_nr_or_id(&argvars[0]);
tv_list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1); tv_list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1);
tv_list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1); tv_list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1);
} }
@@ -12593,7 +12593,7 @@ static int matchadd_dict_arg(typval_T *tv, const char **conceal_char,
} }
if ((di = tv_dict_find(tv->vval.v_dict, S_LEN("window"))) != NULL) { if ((di = tv_dict_find(tv->vval.v_dict, S_LEN("window"))) != NULL) {
*win = find_win_by_nr(&di->di_tv, NULL); *win = find_win_by_nr_or_id(&di->di_tv);
if (*win == NULL) { if (*win == NULL) {
EMSG(_("E957: Invalid window number")); EMSG(_("E957: Invalid window number"));
return FAIL; return FAIL;
@@ -14867,7 +14867,7 @@ static void f_setloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
rettv->vval.v_number = -1; rettv->vval.v_number = -1;
win = find_win_by_nr(&argvars[0], NULL); win = find_win_by_nr_or_id(&argvars[0]);
if (win != NULL) { if (win != NULL) {
set_qf_ll_list(win, &argvars[1], rettv); set_qf_ll_list(win, &argvars[1], rettv);
} }
@@ -17616,19 +17616,16 @@ static void f_win_id2win(typval_T *argvars, typval_T *rettv, FunPtr fptr)
rettv->vval.v_number = win_id2win(argvars); rettv->vval.v_number = win_id2win(argvars);
} }
/* /// "winbufnr(nr)" function
* "winbufnr(nr)" function
*/
static void f_winbufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_winbufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{ {
win_T *wp; win_T *wp = find_win_by_nr_or_id(&argvars[0]);
if (wp == NULL) {
wp = find_win_by_nr(&argvars[0], NULL);
if (wp == NULL)
rettv->vval.v_number = -1; rettv->vval.v_number = -1;
else } else {
rettv->vval.v_number = wp->w_buffer->b_fnum; rettv->vval.v_number = wp->w_buffer->b_fnum;
} }
}
/* /*
* "wincol()" function * "wincol()" function
@@ -17639,19 +17636,16 @@ static void f_wincol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
rettv->vval.v_number = curwin->w_wcol + 1; rettv->vval.v_number = curwin->w_wcol + 1;
} }
/* /// "winheight(nr)" function
* "winheight(nr)" function
*/
static void f_winheight(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_winheight(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{ {
win_T *wp; win_T *wp = find_win_by_nr_or_id(&argvars[0]);
if (wp == NULL) {
wp = find_win_by_nr(&argvars[0], NULL);
if (wp == NULL)
rettv->vval.v_number = -1; rettv->vval.v_number = -1;
else } else {
rettv->vval.v_number = wp->w_height; rettv->vval.v_number = wp->w_height;
} }
}
/* /*
* "winline()" function * "winline()" function
@@ -17914,19 +17908,16 @@ static char *save_tv_as_string(typval_T *tv, ptrdiff_t *const len, bool endnl)
return ret; return ret;
} }
/* /// "winwidth(nr)" function
* "winwidth(nr)" function
*/
static void f_winwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_winwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{ {
win_T *wp; win_T *wp = find_win_by_nr_or_id(&argvars[0]);
if (wp == NULL) {
wp = find_win_by_nr(&argvars[0], NULL);
if (wp == NULL)
rettv->vval.v_number = -1; rettv->vval.v_number = -1;
else } else {
rettv->vval.v_number = wp->w_width; rettv->vval.v_number = wp->w_width;
} }
}
/// "wordcount()" function /// "wordcount()" function
static void f_wordcount(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_wordcount(typval_T *argvars, typval_T *rettv, FunPtr fptr)