1
0
forked from aniani/vim

patch 8.1.1127: getwinpos() doesn't work in terminal on MS-Windows console

Problem:    getwinpos() doesn't work in terminal on MS-Windows console.
Solution:   Adjust #ifdefs.  Disable test for MS-Windows console.
This commit is contained in:
Bram Moolenaar
2019-04-06 20:00:19 +02:00
parent 3d3f21764a
commit 6bc9305a02
5 changed files with 22 additions and 11 deletions

View File

@@ -2843,7 +2843,7 @@ static int winpos_x = -1;
static int winpos_y = -1; static int winpos_y = -1;
static int did_request_winpos = 0; static int did_request_winpos = 0;
# if (defined(FEAT_EVAL) && defined(HAVE_TGETENT)) || defined(PROTO) # if defined(FEAT_EVAL) || defined(FEAT_TERMINAL) || defined(PROTO)
/* /*
* Try getting the Vim window position from the terminal. * Try getting the Vim window position from the terminal.
* Returns OK or FAIL. * Returns OK or FAIL.
@@ -4858,7 +4858,7 @@ check_termcode(
/* /*
* Check for a window position response from the terminal: * Check for a window position response from the terminal:
* {lead}3;{x}:{y}t * {lead}3;{x};{y}t
*/ */
else if (did_request_winpos else if (did_request_winpos
&& ((len >= 4 && tp[0] == ESC && tp[1] == '[') && ((len >= 4 && tp[0] == ESC && tp[1] == '[')
@@ -4925,11 +4925,11 @@ check_termcode(
if (i - j >= 21 && STRNCMP(tp + j + 3, "rgb:", 4) == 0 if (i - j >= 21 && STRNCMP(tp + j + 3, "rgb:", 4) == 0
&& tp[j + 11] == '/' && tp[j + 16] == '/') && tp[j + 11] == '/' && tp[j + 16] == '/')
{ {
#ifdef FEAT_TERMINAL # ifdef FEAT_TERMINAL
int rval = hexhex2nr(tp + j + 7); int rval = hexhex2nr(tp + j + 7);
int gval = hexhex2nr(tp + j + 12); int gval = hexhex2nr(tp + j + 12);
int bval = hexhex2nr(tp + j + 17); int bval = hexhex2nr(tp + j + 17);
#endif # endif
if (is_bg) if (is_bg)
{ {
char *newval = (3 * '6' < tp[j+7] + tp[j+12] char *newval = (3 * '6' < tp[j+7] + tp[j+12]
@@ -4937,11 +4937,11 @@ check_termcode(
LOG_TR(("Received RBG response: %s", tp)); LOG_TR(("Received RBG response: %s", tp));
rbg_status = STATUS_GOT; rbg_status = STATUS_GOT;
#ifdef FEAT_TERMINAL # ifdef FEAT_TERMINAL
bg_r = rval; bg_r = rval;
bg_g = gval; bg_g = gval;
bg_b = bval; bg_b = bval;
#endif # endif
if (!option_was_set((char_u *)"bg") if (!option_was_set((char_u *)"bg")
&& STRCMP(p_bg, newval) != 0) && STRCMP(p_bg, newval) != 0)
{ {
@@ -4952,7 +4952,7 @@ check_termcode(
redraw_asap(CLEAR); redraw_asap(CLEAR);
} }
} }
#ifdef FEAT_TERMINAL # ifdef FEAT_TERMINAL
else else
{ {
LOG_TR(("Received RFG response: %s", tp)); LOG_TR(("Received RFG response: %s", tp));
@@ -4961,7 +4961,7 @@ check_termcode(
fg_g = gval; fg_g = gval;
fg_b = bval; fg_b = bval;
} }
#endif # endif
} }
/* got finished code: consume it */ /* got finished code: consume it */

View File

@@ -3866,8 +3866,11 @@ parse_csi(
if (command != 't' || argcount != 1 || args[0] != 13) if (command != 't' || argcount != 1 || args[0] != 13)
return 0; // not handled return 0; // not handled
// When getting the window position fails it results in zero/zero. // 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))
(void)ui_get_winpos(&x, &y, (varnumber_T)100); (void)ui_get_winpos(&x, &y, (varnumber_T)100);
#endif
FOR_ALL_WINDOWS(wp) FOR_ALL_WINDOWS(wp)
if (wp->w_buffer == term->tl_buffer) if (wp->w_buffer == term->tl_buffer)

View File

@@ -1889,6 +1889,11 @@ func Test_terminal_statusline()
endfunc endfunc
func Test_terminal_getwinpos() func Test_terminal_getwinpos()
" does not work in the MS-Windows console
if has('win32') && !has('gui')
return
endif
" split, go to the bottom-right window " split, go to the bottom-right window
split split
wincmd j wincmd j

View File

@@ -627,10 +627,9 @@ ui_new_shellsize(void)
} }
} }
#if (defined(FEAT_EVAL) \ #if ((defined(FEAT_EVAL) || defined(FEAT_TERMINAL)) \
&& (defined(FEAT_GUI) \ && (defined(FEAT_GUI) \
|| (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)))) \ || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)))) \
|| defined(FEAT_TERMINAL) \
|| defined(PROTO) || defined(PROTO)
/* /*
* Get the window position in pixels, if possible. * Get the window position in pixels, if possible.
@@ -645,6 +644,8 @@ ui_get_winpos(int *x, int *y, varnumber_T timeout)
# endif # endif
# if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE) # if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
return term_get_winpos(x, y, timeout); return term_get_winpos(x, y, timeout);
# else
return FAIL;
# endif # endif
} }
#endif #endif

View File

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