From 36968af1558b295b5fdf56973d5dcc75fce85658 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 15 Nov 2021 17:13:11 +0000 Subject: patch 8.2.3597: Vim seems to hang when writing a long text to a terminal Problem: Vim seems to hang when writing a very long text to a terminal window. Solution: Limit the amount of text based on 'termwinscroll'. (issue #9080) --- src/terminal.c | 16 +++++++++++++++- src/version.c | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/terminal.c b/src/terminal.c index 1adf690ad..fb8b2881f 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1130,10 +1130,24 @@ get_tty_part(term_T *term UNUSED) * Write job output "msg[len]" to the vterm. */ static void -term_write_job_output(term_T *term, char_u *msg, size_t len) +term_write_job_output(term_T *term, char_u *msg_arg, size_t len_arg) { + char_u *msg = msg_arg; + size_t len = len_arg; VTerm *vterm = term->tl_vterm; size_t prevlen = vterm_output_get_buffer_current(vterm); + size_t limit = term->tl_buffer->b_p_twsl * term->tl_cols * 3; + + // Limit the length to 'termwinscroll' * cols * 3 bytes. Keep the text at + // the end. + if (len > limit) + { + char_u *p = msg + len - limit; + + p -= (*mb_head_off)(msg, p); + len -= p - msg; + msg = p; + } vterm_input_write(vterm, (char *)msg, len); diff --git a/src/version.c b/src/version.c index 39a61c915..9cf0ee639 100644 --- a/src/version.c +++ b/src/version.c @@ -757,6 +757,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3597, /**/ 3596, /**/ -- cgit v1.2.1