Mercurial > vim
changeset 16253:f28ef3d27f91 v8.1.1131
patch 8.1.1131: getwinpos() does not work in the MS-Windows console
commit https://github.com/vim/vim/commit/16c34c37659e6afca74169969bdacb6b866548c9
Author: Bram Moolenaar <Bram@vim.org>
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().
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 06 Apr 2019 22:15:04 +0200 |
parents | b3d817081055 |
children | c3fecd5bffcf |
files | src/evalfunc.c src/terminal.c src/testdir/test_terminal.vim src/ui.c src/version.c |
diffstat | 5 files changed, 33 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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
--- 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\<CR>")
--- 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