aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <janedmundlazo@hotmail.com>2018-08-15 11:53:38 -0400
committerJan Edmund Lazo <janedmundlazo@hotmail.com>2018-08-15 12:20:46 -0400
commitb89c08901c1e619b9aeca6f109f6ba73a7be4e9f (patch)
tree140e2d99f095c0739740189755f619306a6f3f0d
parentb5cfac089409faf17a290d4bfe1b669212e2984e (diff)
downloadrneovim-b89c08901c1e619b9aeca6f109f6ba73a7be4e9f.tar.gz
rneovim-b89c08901c1e619b9aeca6f109f6ba73a7be4e9f.tar.bz2
rneovim-b89c08901c1e619b9aeca6f109f6ba73a7be4e9f.zip
vim-patch:8.0.1364: there is no easy way to get the window position
Problem: There is no easy way to get the window position. Solution: Add win_screenpos(). https://github.com/vim/vim/commit/22044dc31788d9f1c2da7725269884d9923b4795
-rw-r--r--runtime/doc/eval.txt9
-rw-r--r--src/nvim/eval.c9
-rw-r--r--src/nvim/eval.lua1
-rw-r--r--src/nvim/testdir/test_window_cmd.vim13
4 files changed, 32 insertions, 0 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index cfc3b70443..45faf8cdfe 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2352,6 +2352,7 @@ win_getid([{win} [, {tab}]]) Number get |window-ID| for {win} in {tab}
win_gotoid({expr}) Number go to |window-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}
@@ -8181,6 +8182,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/nvim/eval.c b/src/nvim/eval.c
index 86f57ee5a2..17057ea28d 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -10310,6 +10310,15 @@ static void f_getwininfo(typval_T *argvars, typval_T *rettv, FunPtr fptr)
}
}
+// "win_screenpos()" function
+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);
+ 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);
+}
+
/*
* "getwinposx()" function
*/
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua
index 23959f348a..328f46443f 100644
--- a/src/nvim/eval.lua
+++ b/src/nvim/eval.lua
@@ -338,6 +338,7 @@ return {
win_gotoid={args=1},
win_id2tabwin={args=1},
win_id2win={args=1},
+ win_screenpos={args=1},
winbufnr={args=1},
wincol={},
winheight={args=1},
diff --git a/src/nvim/testdir/test_window_cmd.vim b/src/nvim/testdir/test_window_cmd.vim
index ad60c8d3c7..b3ab6957dc 100644
--- a/src/nvim/testdir/test_window_cmd.vim
+++ b/src/nvim/testdir/test_window_cmd.vim
@@ -374,6 +374,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