Patch 8.1.1967
Problem: Line() only works for the current window.
Solution: Add an optional argument for the window to use.
Files: runtime/eval.txt, src/evalfunc.c, src/testdir/test_popupwin.vim
*** ../vim-8.1.1966/src/evalfunc.c 2019-09-02 22:31:08.010296361 +0200
--- src/evalfunc.c 2019-09-02 22:54:27.657439030 +0200
***************
*** 634,640 ****
{"len", 1, 1, FEARG_1, f_len},
{"libcall", 3, 3, FEARG_3, f_libcall},
{"libcallnr", 3, 3, FEARG_3, f_libcallnr},
! {"line", 1, 1, FEARG_1, f_line},
{"line2byte", 1, 1, FEARG_1, f_line2byte},
{"lispindent", 1, 1, FEARG_1, f_lispindent},
{"list2str", 1, 2, FEARG_1, f_list2str},
--- 634,640 ----
{"len", 1, 1, FEARG_1, f_len},
{"libcall", 3, 3, FEARG_3, f_libcall},
{"libcallnr", 3, 3, FEARG_3, f_libcallnr},
! {"line", 1, 2, FEARG_1, f_line},
{"line2byte", 1, 1, FEARG_1, f_line2byte},
{"lispindent", 1, 1, FEARG_1, f_lispindent},
{"list2str", 1, 2, FEARG_1, f_list2str},
***************
*** 1154,1167 ****
--- 1154,1171 ----
{
typval_T rettv;
linenr_T lnum;
+ int save_type;
lnum = (linenr_T)tv_get_number_chk(&argvars[0], NULL);
if (lnum == 0) /* no valid number, try using line() */
{
rettv.v_type = VAR_NUMBER;
+ save_type = argvars[1].v_type;
+ argvars[1].v_type = VAR_UNKNOWN;
f_line(argvars, &rettv);
lnum = (linenr_T)rettv.vval.v_number;
clear_tv(&rettv);
+ argvars[1].v_type = save_type;
}
return lnum;
}
***************
*** 6658,6673 ****
}
/*
! * "line(string)" function
*/
static void
f_line(typval_T *argvars, typval_T *rettv)
{
linenr_T lnum = 0;
! pos_T *fp;
int fnum;
- fp = var2fpos(&argvars[0], TRUE, &fnum);
if (fp != NULL)
lnum = fp->lnum;
rettv->vval.v_number = lnum;
--- 6662,6701 ----
}
/*
! * "line(string, [winid])" function
*/
static void
f_line(typval_T *argvars, typval_T *rettv)
{
linenr_T lnum = 0;
! pos_T *fp = NULL;
int fnum;
+ int id;
+ tabpage_T *tp;
+ win_T *wp;
+ win_T *save_curwin;
+ tabpage_T *save_curtab;
+
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
+ // use window specified in the second argument
+ id = (int)tv_get_number(&argvars[1]);
+ wp = win_id2wp_tp(id, &tp);
+ if (wp != NULL && tp != NULL)
+ {
+ if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, TRUE)
+ == OK)
+ {
+ check_cursor();
+ fp = var2fpos(&argvars[0], TRUE, &fnum);
+ }
+ restore_win_noblock(save_curwin, save_curtab, TRUE);
+ }
+ }
+ else
+ // use current window
+ fp = var2fpos(&argvars[0], TRUE, &fnum);
if (fp != NULL)
lnum = fp->lnum;
rettv->vval.v_number = lnum;
*** ../vim-8.1.1966/src/testdir/test_popupwin.vim 2019-09-01
23:27:02.142724494 +0200
--- src/testdir/test_popupwin.vim 2019-09-02 22:50:18.503535794 +0200
***************
*** 346,351 ****
--- 346,355 ----
redraw
call assert_equal(11, popup_getoptions(winid).firstline)
call assert_equal(11, popup_getpos(winid).firstline)
+ " check line() works with popup window
+ call assert_equal(11, line('.', winid))
+ call assert_equal(50, line('$', winid))
+ call assert_equal(0, line('$', 123456))
" Normal command changes what is displayed but not "firstline"
call win_execute(winid, "normal! \<c-y>")
*** ../vim-8.1.1966/src/version.c 2019-09-02 22:31:08.014296345 +0200
--- src/version.c 2019-09-02 22:45:22.014357069 +0200
***************
*** 763,764 ****
--- 763,766 ----
{ /* Add new patch number below this line */
+ /**/
+ 1967,
/**/
--
An error has occurred. Hit any user to continue.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/201909022057.x82KvC58017139%40masaka.moolenaar.net.