changeset 11753:f7c2473796b7 v8.0.0759

patch 8.0.0759: MS-Windows: terminal does not adjust size commit https://github.com/vim/vim/commit/43da3e36b21b9df20e4b2f380df76bbc7e91a965 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 23 17:27:54 2017 +0200 patch 8.0.0759: MS-Windows: terminal does not adjust size Problem: MS-Windows: terminal does not adjust size to the Vim window size. Solution: Add a call to winpty_set_size(). (Yasuhiro Matsumoto, closes https://github.com/vim/vim/issues/1863)
author Christian Brabandt <cb@256bit.org>
date Sun, 23 Jul 2017 17:30:06 +0200
parents c69cf4215217
children 46b0051d48c9
files src/terminal.c src/version.c
diffstat 2 files changed, 39 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -118,6 +118,7 @@ static term_T *first_term = NULL;
  * Functions with separate implementation for MS-Windows and Unix-like systems.
  */
 static int term_and_job_init(term_T *term, int rows, int cols, char_u *cmd);
+static void term_report_winsize(term_T *term, int rows, int cols);
 static void term_free(term_T *term);
 
 /**************************************
@@ -765,24 +766,7 @@ term_update_window(win_T *wp)
 	vterm_set_size(vterm, rows, cols);
 	ch_logn(term->tl_job->jv_channel, "Resizing terminal to %d lines",
 									 rows);
-
-#if defined(UNIX)
-	/* Use an ioctl() to report the new window size to the job. */
-	if (term->tl_job != NULL && term->tl_job->jv_channel != NULL)
-	{
-	    int fd = -1;
-	    int part;
-
-	    for (part = PART_OUT; part < PART_COUNT; ++part)
-	    {
-		fd = term->tl_job->jv_channel->ch_part[part].ch_fd;
-		if (isatty(fd))
-		    break;
-	    }
-	    if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK)
-		mch_stop_job(term->tl_job, (char_u *)"winch");
-	}
-#endif
+	term_report_winsize(term, rows, cols);
     }
 
     /* The cursor may have been moved when resizing. */
@@ -921,6 +905,7 @@ void (*winpty_config_free)(void*);
 void (*winpty_spawn_config_free)(void*);
 void (*winpty_error_free)(void*);
 LPCWSTR (*winpty_error_msg)(void*);
+BOOL (*winpty_set_size)(void*, int, int, void*);
 
 /**************************************
  * 2. MS-Windows implementation.
@@ -953,6 +938,7 @@ dyn_winpty_init(void)
 	{"winpty_spawn_config_free", (FARPROC*)&winpty_spawn_config_free},
 	{"winpty_spawn_config_new", (FARPROC*)&winpty_spawn_config_new},
 	{"winpty_error_msg", (FARPROC*)&winpty_error_msg},
+	{"winpty_set_size", (FARPROC*)&winpty_set_size},
 	{NULL, NULL}
     };
 
@@ -1122,6 +1108,15 @@ term_free(term_T *term)
 	vterm_free(term->tl_vterm);
 }
 
+/*
+ * Request size to terminal.
+ */
+    static void
+term_report_winsize(term_T *term, int rows, int cols)
+{
+    winpty_set_size(term->tl_winpty, cols, rows, NULL);
+}
+
 # else
 
 /**************************************
@@ -1161,6 +1156,30 @@ term_free(term_T *term)
     if (term->tl_vterm != NULL)
 	vterm_free(term->tl_vterm);
 }
+
+/*
+ * Request size to terminal.
+ */
+    static void
+term_report_winsize(term_T *term, int rows, int cols)
+{
+    /* Use an ioctl() to report the new window size to the job. */
+    if (term->tl_job != NULL && term->tl_job->jv_channel != NULL)
+    {
+	int fd = -1;
+	int part;
+
+	for (part = PART_OUT; part < PART_COUNT; ++part)
+	{
+	    fd = term->tl_job->jv_channel->ch_part[part].ch_fd;
+	    if (isatty(fd))
+		break;
+	}
+	if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK)
+	    mch_stop_job(term->tl_job, (char_u *)"winch");
+    }
+}
+
 # endif
 
 #endif /* FEAT_TERMINAL */
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    759,
+/**/
     758,
 /**/
     757,