changeset 16253:f28ef3d27f91 v8.1.1131

patch 8.1.1131: getwinpos() does not work in the MS-Windows console commit https://github.com/vim/vim/commit/16c34c37659e6afca74169969bdacb6b866548c9 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 6 22:01:24 2019 +0200 patch 8.1.1131: getwinpos() does not work in the MS-Windows console Problem: getwinpos() does not work in the MS-Windows console. Solution: Implement getwinpos().
author Bram Moolenaar <Bram@vim.org>
date Sat, 06 Apr 2019 22:15:04 +0200
parents b3d817081055
children c3fecd5bffcf
files src/evalfunc.c src/terminal.c src/testdir/test_terminal.vim src/ui.c src/version.c
diffstat 5 files changed, 33 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5985,7 +5985,9 @@ f_getwinpos(typval_T *argvars UNUSED, ty
 
     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, ty
 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, t
 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;
 
--- 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
 
--- 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>")
--- 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_
     if (gui.in_use)
 	return gui_mch_get_winpos(x, y);
 # endif
-# if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
+# 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
+#  else
     return FAIL;
+#  endif
 # endif
 }
 #endif
--- 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,