# HG changeset patch # User Bram Moolenaar # Date 1554581704 -7200 # Node ID f28ef3d27f911a7abca14ac01c83881379d107e9 # Parent b3d8170810559b777725b2514eaafabdb74ad566 patch 8.1.1131: getwinpos() does not work in the MS-Windows console commit https://github.com/vim/vim/commit/16c34c37659e6afca74169969bdacb6b866548c9 Author: Bram Moolenaar 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(). diff --git a/src/evalfunc.c b/src/evalfunc.c --- 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; diff --git a/src/terminal.c b/src/terminal.c --- 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 --- 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\") diff --git a/src/ui.c b/src/ui.c --- 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 diff --git a/src/version.c b/src/version.c --- 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,