summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-04-06 22:01:24 +0200
committerBram Moolenaar <Bram@vim.org>2019-04-06 22:01:24 +0200
commit16c34c37659e6afca74169969bdacb6b866548c9 (patch)
treeb10c296c632b2b19f39552989c4f4cb06d4289fd
parent11640238289969a278876596a380952ffe25aad3 (diff)
downloadvim-git-16c34c37659e6afca74169969bdacb6b866548c9.tar.gz
patch 8.1.1131: getwinpos() does not work in the MS-Windows consolev8.1.1131
Problem: getwinpos() does not work in the MS-Windows console. Solution: Implement getwinpos().
-rw-r--r--src/evalfunc.c13
-rw-r--r--src/terminal.c4
-rw-r--r--src/testdir/test_terminal.vim21
-rw-r--r--src/ui.c9
-rw-r--r--src/version.c2
5 files changed, 33 insertions, 16 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 968bc0089..b79284c07 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5985,7 +5985,9 @@ f_getwinpos(typval_T *argvars UNUSED, typval_T *rettv)
if (rettv_list_alloc(rettv) == FAIL)
return;
-#if defined(FEAT_GUI) || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE))
+#if defined(FEAT_GUI) \
+ || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)) \
+ || defined(MSWIN)
{
varnumber_T timeout = 100;
@@ -6007,7 +6009,10 @@ f_getwinpos(typval_T *argvars UNUSED, typval_T *rettv)
f_getwinposx(typval_T *argvars UNUSED, typval_T *rettv)
{
rettv->vval.v_number = -1;
-#if defined(FEAT_GUI) || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE))
+#if defined(FEAT_GUI) \
+ || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)) \
+ || defined(MSWIN)
+
{
int x, y;
@@ -6024,7 +6029,9 @@ f_getwinposx(typval_T *argvars UNUSED, typval_T *rettv)
f_getwinposy(typval_T *argvars UNUSED, typval_T *rettv)
{
rettv->vval.v_number = -1;
-#if defined(FEAT_GUI) || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE))
+#if defined(FEAT_GUI) \
+ || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)) \
+ || defined(MSWIN)
{
int x, y;
diff --git a/src/terminal.c b/src/terminal.c
index 4ff28b851..01cabf021 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -3868,7 +3868,9 @@ parse_csi(
// When getting the window position is not possible or it fails it results
// in zero/zero.
-#if defined(FEAT_GUI) || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE))
+#if defined(FEAT_GUI) \
+ || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)) \
+ || defined(MSWIN)
(void)ui_get_winpos(&x, &y, (varnumber_T)100);
#endif
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 56b36d0c3..cbde579c8 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1889,12 +1889,6 @@ func Test_terminal_statusline()
endfunc
func Test_terminal_getwinpos()
- " getwinpos() does not work in the MS-Windows console, and the GUI runs the
- " console version in the terminal window.
- if has('win32')
- return
- endif
-
" split, go to the bottom-right window
split
wincmd j
@@ -1913,10 +1907,17 @@ func Test_terminal_getwinpos()
let xpos = str2nr(substitute(line, '\[\(\d\+\), \d\+\]', '\1', ''))
let ypos = str2nr(substitute(line, '\[\d\+, \(\d\+\)\]', '\1', ''))
- " Position must be bigger than the getwinpos() result of Vim itself.
- let [xroot, yroot] = getwinpos()
- call assert_inrange(xroot + 2, xroot + 1000, xpos)
- call assert_inrange(yroot + 2, yroot + 1000, ypos)
+ " getwinpos() in the MS-Windows console returns the screen position of the
+ " emulated console.
+ if has('win32')
+ call assert_inrange(0, 4000, xpos)
+ call assert_inrange(0, 2000, ypos)
+ else
+ " Position must be bigger than the getwinpos() result of Vim itself.
+ let [xroot, yroot] = getwinpos()
+ call assert_inrange(xroot + 2, xroot + 1000, xpos)
+ call assert_inrange(yroot + 2, yroot + 1000, ypos)
+ endif
call term_wait(buf)
call term_sendkeys(buf, ":q\<CR>")
diff --git a/src/ui.c b/src/ui.c
index 72148760d..3f41010c9 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -629,6 +629,7 @@ ui_new_shellsize(void)
#if ((defined(FEAT_EVAL) || defined(FEAT_TERMINAL)) \
&& (defined(FEAT_GUI) \
+ || defined(MSWIN) \
|| (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)))) \
|| defined(PROTO)
/*
@@ -642,10 +643,14 @@ ui_get_winpos(int *x, int *y, varnumber_T timeout)
if (gui.in_use)
return gui_mch_get_winpos(x, y);
# endif
-# if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
- return term_get_winpos(x, y, timeout);
+# if defined(MSWIN) && !defined(FEAT_GUI)
+ return mch_get_winpos(x, y);
# else
+# if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
+ return term_get_winpos(x, y, timeout);
+# else
return FAIL;
+# endif
# endif
}
#endif
diff --git a/src/version.c b/src/version.c
index 005223222..1fa1e8e6f 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 */
/**/
+ 1131,
+/**/
1130,
/**/
1129,