@@ -197,6 +197,7 @@ static void f_gettabinfo(typval_T *argvars, typval_T *rettv);
197197static void f_gettabvar (typval_T * argvars , typval_T * rettv );
198198static void f_gettabwinvar (typval_T * argvars , typval_T * rettv );
199199static void f_getwininfo (typval_T * argvars , typval_T * rettv );
200+ static void f_getwinpos (typval_T * argvars , typval_T * rettv );
200201static void f_getwinposx (typval_T * argvars , typval_T * rettv );
201202static void f_getwinposy (typval_T * argvars , typval_T * rettv );
202203static void f_getwinvar (typval_T * argvars , typval_T * rettv );
@@ -641,6 +642,7 @@ static struct fst
641642 {"gettabvar" , 2 , 3 , f_gettabvar },
642643 {"gettabwinvar" , 3 , 4 , f_gettabwinvar },
643644 {"getwininfo" , 0 , 1 , f_getwininfo },
645+ {"getwinpos" , 0 , 1 , f_getwinpos },
644646 {"getwinposx" , 0 , 0 , f_getwinposx },
645647 {"getwinposy" , 0 , 0 , f_getwinposy },
646648 {"getwinvar" , 2 , 3 , f_getwinvar },
@@ -5526,6 +5528,38 @@ f_win_screenpos(typval_T *argvars, typval_T *rettv)
55265528 list_append_number (rettv -> vval .v_list , wp == NULL ? 0 : wp -> w_wincol + 1 );
55275529}
55285530
5531+ /*
5532+ * "getwinpos({timeout})" function
5533+ */
5534+ static void
5535+ f_getwinpos (typval_T * argvars UNUSED , typval_T * rettv )
5536+ {
5537+ int x = -1 ;
5538+ int y = -1 ;
5539+
5540+ if (rettv_list_alloc (rettv ) == FAIL )
5541+ return ;
5542+ #ifdef FEAT_GUI
5543+ if (gui .in_use )
5544+ gui_mch_get_winpos (& x , & y );
5545+ # if defined(HAVE_TGETENT ) && defined(FEAT_TERMRESPONSE )
5546+ else
5547+ # endif
5548+ #endif
5549+ #if defined(HAVE_TGETENT ) && defined(FEAT_TERMRESPONSE )
5550+ {
5551+ varnumber_T timeout = 100 ;
5552+
5553+ if (argvars [0 ].v_type != VAR_UNKNOWN )
5554+ timeout = get_tv_number (& argvars [0 ]);
5555+ term_get_winpos (& x , & y , timeout );
5556+ }
5557+ #endif
5558+ list_append_number (rettv -> vval .v_list , (varnumber_T )x );
5559+ list_append_number (rettv -> vval .v_list , (varnumber_T )y );
5560+ }
5561+
5562+
55295563/*
55305564 * "getwinposx()" function
55315565 */
@@ -5547,7 +5581,7 @@ f_getwinposx(typval_T *argvars UNUSED, typval_T *rettv)
55475581 {
55485582 int x , y ;
55495583
5550- if (term_get_winpos (& x , & y ) == OK )
5584+ if (term_get_winpos (& x , & y , ( varnumber_T ) 100 ) == OK )
55515585 rettv -> vval .v_number = x ;
55525586 }
55535587#endif
@@ -5574,7 +5608,7 @@ f_getwinposy(typval_T *argvars UNUSED, typval_T *rettv)
55745608 {
55755609 int x , y ;
55765610
5577- if (term_get_winpos (& x , & y ) == OK )
5611+ if (term_get_winpos (& x , & y , ( varnumber_T ) 100 ) == OK )
55785612 rettv -> vval .v_number = y ;
55795613 }
55805614#endif
0 commit comments