diff options
author | Marco Hinz <mh.codebro@gmail.com> | 2019-04-03 19:44:54 +0200 |
---|---|---|
committer | Marco Hinz <mh.codebro@gmail.com> | 2019-04-04 20:24:39 +0200 |
commit | d608e9c950411611b10a52aa9d81127563cf51b4 (patch) | |
tree | c44bcc0ed28201e6c7ef4df93ef49c4e12a5315d | |
parent | 5510361a8ca8b47e9c3a46fae9ec0f0b00b507d3 (diff) | |
download | rneovim-d608e9c950411611b10a52aa9d81127563cf51b4.tar.gz rneovim-d608e9c950411611b10a52aa9d81127563cf51b4.tar.bz2 rneovim-d608e9c950411611b10a52aa9d81127563cf51b4.zip |
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.
https://github.com/vim/vim/commit/babfcf54ae9bf9570eddf4958a553635cd589e21
Fixes https://github.com/neovim/neovim/issues/9843
-rw-r--r-- | src/nvim/eval.c | 47 |
1 files changed, 19 insertions, 28 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 833a5073c4..7279f772ac 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -10076,7 +10076,7 @@ static void get_qf_loc_list(int is_qf, win_T *wp, typval_T *what_arg, /// "getloclist()" function 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); } @@ -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) { 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_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) { - *win = find_win_by_nr(&di->di_tv, NULL); + *win = find_win_by_nr_or_id(&di->di_tv); if (*win == NULL) { EMSG(_("E957: Invalid window number")); return FAIL; @@ -14867,7 +14867,7 @@ static void f_setloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr) 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) { set_qf_ll_list(win, &argvars[1], rettv); } @@ -17616,18 +17616,15 @@ static void f_win_id2win(typval_T *argvars, typval_T *rettv, FunPtr fptr) 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) { - win_T *wp; - - wp = find_win_by_nr(&argvars[0], NULL); - if (wp == NULL) + win_T *wp = find_win_by_nr_or_id(&argvars[0]); + if (wp == NULL) { rettv->vval.v_number = -1; - else + } else { rettv->vval.v_number = wp->w_buffer->b_fnum; + } } /* @@ -17639,18 +17636,15 @@ static void f_wincol(typval_T *argvars, typval_T *rettv, FunPtr fptr) 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) { - win_T *wp; - - wp = find_win_by_nr(&argvars[0], NULL); - if (wp == NULL) + win_T *wp = find_win_by_nr_or_id(&argvars[0]); + if (wp == NULL) { rettv->vval.v_number = -1; - else + } else { rettv->vval.v_number = wp->w_height; + } } /* @@ -17914,18 +17908,15 @@ static char *save_tv_as_string(typval_T *tv, ptrdiff_t *const len, bool endnl) return ret; } -/* - * "winwidth(nr)" function - */ +/// "winwidth(nr)" function static void f_winwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr) { - win_T *wp; - - wp = find_win_by_nr(&argvars[0], NULL); - if (wp == NULL) + win_T *wp = find_win_by_nr_or_id(&argvars[0]); + if (wp == NULL) { rettv->vval.v_number = -1; - else + } else { rettv->vval.v_number = wp->w_width; + } } /// "wordcount()" function |