Mercurial > vim
comparison src/evalfunc.c @ 13379:0f9dd1b43244
patch 8.0.1563: timeout of getwinposx() can be too short
commit https://github.com/vim/vim/commit/3f54fd319f6641b4bed478bcc90cdb39ede68e31
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Mar 3 21:29:55 2018 +0100
patch 8.0.1563: timeout of getwinposx() can be too short
Problem: Timeout of getwinposx() can be too short. (lilydjwg)
Solution: Add getwinpos(). (closes https://github.com/vim/vim/issues/2689)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 03 Mar 2018 21:30:06 +0100 |
parents | 53f15c99a9fd |
children | 69517d67421f |
comparison
equal
deleted
inserted
replaced
13378:6099b4bc3dc2 | 13379:0f9dd1b43244 |
---|---|
195 static void f_getregtype(typval_T *argvars, typval_T *rettv); | 195 static void f_getregtype(typval_T *argvars, typval_T *rettv); |
196 static void f_gettabinfo(typval_T *argvars, typval_T *rettv); | 196 static void f_gettabinfo(typval_T *argvars, typval_T *rettv); |
197 static void f_gettabvar(typval_T *argvars, typval_T *rettv); | 197 static void f_gettabvar(typval_T *argvars, typval_T *rettv); |
198 static void f_gettabwinvar(typval_T *argvars, typval_T *rettv); | 198 static void f_gettabwinvar(typval_T *argvars, typval_T *rettv); |
199 static void f_getwininfo(typval_T *argvars, typval_T *rettv); | 199 static void f_getwininfo(typval_T *argvars, typval_T *rettv); |
200 static void f_getwinpos(typval_T *argvars, typval_T *rettv); | |
200 static void f_getwinposx(typval_T *argvars, typval_T *rettv); | 201 static void f_getwinposx(typval_T *argvars, typval_T *rettv); |
201 static void f_getwinposy(typval_T *argvars, typval_T *rettv); | 202 static void f_getwinposy(typval_T *argvars, typval_T *rettv); |
202 static void f_getwinvar(typval_T *argvars, typval_T *rettv); | 203 static void f_getwinvar(typval_T *argvars, typval_T *rettv); |
203 static void f_glob(typval_T *argvars, typval_T *rettv); | 204 static void f_glob(typval_T *argvars, typval_T *rettv); |
204 static void f_globpath(typval_T *argvars, typval_T *rettv); | 205 static void f_globpath(typval_T *argvars, typval_T *rettv); |
639 {"getregtype", 0, 1, f_getregtype}, | 640 {"getregtype", 0, 1, f_getregtype}, |
640 {"gettabinfo", 0, 1, f_gettabinfo}, | 641 {"gettabinfo", 0, 1, f_gettabinfo}, |
641 {"gettabvar", 2, 3, f_gettabvar}, | 642 {"gettabvar", 2, 3, f_gettabvar}, |
642 {"gettabwinvar", 3, 4, f_gettabwinvar}, | 643 {"gettabwinvar", 3, 4, f_gettabwinvar}, |
643 {"getwininfo", 0, 1, f_getwininfo}, | 644 {"getwininfo", 0, 1, f_getwininfo}, |
645 {"getwinpos", 0, 1, f_getwinpos}, | |
644 {"getwinposx", 0, 0, f_getwinposx}, | 646 {"getwinposx", 0, 0, f_getwinposx}, |
645 {"getwinposy", 0, 0, f_getwinposy}, | 647 {"getwinposy", 0, 0, f_getwinposy}, |
646 {"getwinvar", 2, 3, f_getwinvar}, | 648 {"getwinvar", 2, 3, f_getwinvar}, |
647 {"glob", 1, 4, f_glob}, | 649 {"glob", 1, 4, f_glob}, |
648 {"glob2regpat", 1, 1, f_glob2regpat}, | 650 {"glob2regpat", 1, 1, f_glob2regpat}, |
5525 list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1); | 5527 list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1); |
5526 list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1); | 5528 list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1); |
5527 } | 5529 } |
5528 | 5530 |
5529 /* | 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 | |
5563 /* | |
5530 * "getwinposx()" function | 5564 * "getwinposx()" function |
5531 */ | 5565 */ |
5532 static void | 5566 static void |
5533 f_getwinposx(typval_T *argvars UNUSED, typval_T *rettv) | 5567 f_getwinposx(typval_T *argvars UNUSED, typval_T *rettv) |
5534 { | 5568 { |
5545 #endif | 5579 #endif |
5546 #if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE) | 5580 #if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE) |
5547 { | 5581 { |
5548 int x, y; | 5582 int x, y; |
5549 | 5583 |
5550 if (term_get_winpos(&x, &y) == OK) | 5584 if (term_get_winpos(&x, &y, (varnumber_T)100) == OK) |
5551 rettv->vval.v_number = x; | 5585 rettv->vval.v_number = x; |
5552 } | 5586 } |
5553 #endif | 5587 #endif |
5554 } | 5588 } |
5555 | 5589 |
5572 #endif | 5606 #endif |
5573 #if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE) | 5607 #if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE) |
5574 { | 5608 { |
5575 int x, y; | 5609 int x, y; |
5576 | 5610 |
5577 if (term_get_winpos(&x, &y) == OK) | 5611 if (term_get_winpos(&x, &y, (varnumber_T)100) == OK) |
5578 rettv->vval.v_number = y; | 5612 rettv->vval.v_number = y; |
5579 } | 5613 } |
5580 #endif | 5614 #endif |
5581 } | 5615 } |
5582 | 5616 |