1
0
forked from aniani/vim

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().
This commit is contained in:
Bram Moolenaar 2019-04-06 22:01:24 +02:00
parent 1164023828
commit 16c34c3765
5 changed files with 33 additions and 16 deletions

View File

@ -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;

View File

@ -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

View File

@ -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>")

View File

@ -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

View File

@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1131,
/**/
1130,
/**/