summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-07-23 17:27:54 +0200
committerBram Moolenaar <Bram@vim.org>2017-07-23 17:27:54 +0200
commit43da3e36b21b9df20e4b2f380df76bbc7e91a965 (patch)
treea2707ad6ccdc6aeccc438ce75d0a662620703fef
parentcdeae99b4ef4d359e4388a72c6d35f9343ce578a (diff)
downloadvim-git-43da3e36b21b9df20e4b2f380df76bbc7e91a965.tar.gz
patch 8.0.0759: MS-Windows: terminal does not adjust sizev8.0.0759
Problem: MS-Windows: terminal does not adjust size to the Vim window size. Solution: Add a call to winpty_set_size(). (Yasuhiro Matsumoto, closes #1863)
-rw-r--r--src/terminal.c55
-rw-r--r--src/version.c2
2 files changed, 39 insertions, 18 deletions
diff --git a/src/terminal.c b/src/terminal.c
index d1ed569ea..95b16c946 100644
--- 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 */
diff --git a/src/version.c b/src/version.c
index bfeedcd4d..c1c68e358 100644
--- 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,