diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-12-02 15:43:37 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-12-02 15:43:37 +0100 |
commit | 22044dc31788d9f1c2da7725269884d9923b4795 (patch) | |
tree | 494741760117a459b7dd197e2bcb1e3ed9d87cc5 | |
parent | af903e5d490ec9c6c49079f67de7e92e3c35a725 (diff) | |
download | vim-git-22044dc31788d9f1c2da7725269884d9923b4795.tar.gz |
patch 8.0.1364: there is no easy way to get the window positionv8.0.1364
Problem: There is no easy way to get the window position.
Solution: Add win_screenpos().
-rw-r--r-- | runtime/doc/eval.txt | 9 | ||||
-rw-r--r-- | src/evalfunc.c | 18 | ||||
-rw-r--r-- | src/testdir/test_window_cmd.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 42 insertions, 0 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 29b3de887..4d524679d 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2452,6 +2452,7 @@ win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab} 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} @@ -8633,6 +8634,14 @@ win_id2win({expr}) *win_id2win()* 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 diff --git a/src/evalfunc.c b/src/evalfunc.c index 76c576855..726908472 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -441,6 +441,7 @@ static void f_win_getid(typval_T *argvars, typval_T *rettv); 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,6 +900,7 @@ static struct fst {"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,6 +5381,22 @@ f_win_id2win(typval_T *argvars, typval_T *rettv) } /* + * "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 diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim index 49bd9fa68..067f09cbc 100644 --- a/src/testdir/test_window_cmd.vim +++ b/src/testdir/test_window_cmd.vim @@ -362,6 +362,19 @@ func Test_equalalways_on_close() 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 diff --git a/src/version.c b/src/version.c index 8587b4dfe..e85058ede 100644 --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1364, +/**/ 1363, /**/ 1362, |