diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-07-23 17:27:54 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-07-23 17:27:54 +0200 |
commit | 43da3e36b21b9df20e4b2f380df76bbc7e91a965 (patch) | |
tree | a2707ad6ccdc6aeccc438ce75d0a662620703fef | |
parent | cdeae99b4ef4d359e4388a72c6d35f9343ce578a (diff) | |
download | vim-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.c | 55 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |