To: vim_dev@googlegroups.com Subject: Patch 8.0.1364 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1364 Problem: There is no easy way to get the window position. Solution: Add win_screenpos(). Files: src/evalfunc.c, src/testdir/test_window_cmd.vim, runtime/doc/eval.txt *** ../vim-8.0.1363/src/evalfunc.c 2017-11-25 14:37:05.410794057 +0100 --- src/evalfunc.c 2017-12-02 15:28:32.248562749 +0100 *************** *** 441,446 **** --- 441,447 ---- static void f_win_gotoid(typval_T *argvars, typval_T *rettv); static void f_win_id2tabwin(typval_T *argvars, typval_T *rettv); static void f_win_id2win(typval_T *argvars, typval_T *rettv); + static void f_win_screenpos(typval_T *argvars, typval_T *rettv); static void f_winbufnr(typval_T *argvars, typval_T *rettv); static void f_wincol(typval_T *argvars, typval_T *rettv); static void f_winheight(typval_T *argvars, typval_T *rettv); *************** *** 899,904 **** --- 900,906 ---- {"win_gotoid", 1, 1, f_win_gotoid}, {"win_id2tabwin", 1, 1, f_win_id2tabwin}, {"win_id2win", 1, 1, f_win_id2win}, + {"win_screenpos", 1, 1, f_win_screenpos}, {"winbufnr", 1, 1, f_winbufnr}, {"wincol", 0, 0, f_wincol}, {"winheight", 1, 1, f_winheight}, *************** *** 5379,5384 **** --- 5381,5402 ---- } /* + * "win_screenpos()" function + */ + static void + f_win_screenpos(typval_T *argvars, typval_T *rettv) + { + win_T *wp; + + if (rettv_list_alloc(rettv) == FAIL) + return; + + wp = find_win_by_nr(&argvars[0], NULL); + list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1); + list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1); + } + + /* * "getwinposx()" function */ static void *** ../vim-8.0.1363/src/testdir/test_window_cmd.vim 2017-08-07 22:02:09.319624624 +0200 --- src/testdir/test_window_cmd.vim 2017-12-02 15:36:31.681113839 +0100 *************** *** 362,367 **** --- 362,380 ---- set equalalways& endfunc + func Test_win_screenpos() + call assert_equal(1, winnr('$')) + split + vsplit + 10wincmd _ + 30wincmd | + call assert_equal([1, 1], win_screenpos(1)) + call assert_equal([1, 32], win_screenpos(2)) + call assert_equal([12, 1], win_screenpos(3)) + call assert_equal([0, 0], win_screenpos(4)) + only + endfunc + func Test_window_jump_tag() help /iccf *** ../vim-8.0.1363/runtime/doc/eval.txt 2017-11-19 20:13:01.618509073 +0100 --- runtime/doc/eval.txt 2017-12-02 15:38:24.912358072 +0100 *************** *** 2452,2457 **** --- 2452,2458 ---- win_gotoid({expr}) Number go to window with ID {expr} win_id2tabwin({expr}) List get tab and window nr from window ID win_id2win({expr}) Number get window nr from window ID + win_screenpos({nr}) List get screen position of window {nr} winbufnr({nr}) Number buffer number of window {nr} wincol() Number window column of the cursor winheight({nr}) Number height of window {nr} *************** *** 8605,8610 **** --- 8634,8647 ---- Return the window number of window with ID {expr}. Return 0 if the window cannot be found in the current tabpage. + win_screenpos({nr}) *win_screenpos()* + Return the screen position of window {nr} as a list with two + numbers: [row, col]. The first window always has position + [1, 1]. + {nr} can be the window number or the |window-ID|. + Return [0, 0] if the window cannot be found in the current + tabpage. + *winbufnr()* winbufnr({nr}) The result is a Number, which is the number of the buffer associated with window {nr}. {nr} can be the window number or *** ../vim-8.0.1363/src/version.c 2017-12-02 15:11:18.421655177 +0100 --- src/version.c 2017-12-02 15:37:36.044680576 +0100 *************** *** 773,774 **** --- 773,776 ---- { /* Add new patch number below this line */ + /**/ + 1364, /**/ -- hundred-and-one symptoms of being an internet addict: 62. If your doorbell rings, you think that new mail has arrived. And then you're disappointed that it's only someone at the door. /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 ///