Problem: getwinpos() does not work in the MS-Windows console.
Solution: Implement getwinpos().
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;
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;
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;
// 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
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
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>")
#if ((defined(FEAT_EVAL) || defined(FEAT_TERMINAL)) \
&& (defined(FEAT_GUI) \
+ || defined(MSWIN) \
|| (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)))) \
|| defined(PROTO)
/*
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
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1131,
/**/
1130,
/**/