Patch 8.2.3597
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)
Files: runtime/doc/options.txt, src/terminal.c
*** ../vim-8.2.3596/runtime/doc/options.txt 2021-10-17 14:13:04.832665843
+0100
--- runtime/doc/options.txt 2021-11-15 17:03:13.711203491 +0000
***************
*** 7919,7924 ****
--- 7941,7949 ----
Number of scrollback lines to keep. When going over this limit the
first 10% of the scrollback lines are deleted. This is just to reduce
the memory usage. See |Terminal-Normal|.
+ Also used as a limit for text sent to the terminal in one write,
+ multiplied by the number of columns times 3 (average number of bytes
+ per cell).
*'termwinsize'* *'tws'*
'termwinsize' 'tws' string (default "")
*** ../vim-8.2.3596/src/terminal.c 2021-11-12 16:01:11.948325522 +0000
--- src/terminal.c 2021-11-15 17:10:25.198600741 +0000
***************
*** 1130,1139 ****
* Write job output "msg[len]" to the vterm.
*/
static void
! term_write_job_output(term_T *term, char_u *msg, size_t len)
{
VTerm *vterm = term->tl_vterm;
size_t prevlen = vterm_output_get_buffer_current(vterm);
vterm_input_write(vterm, (char *)msg, len);
--- 1130,1153 ----
* Write job output "msg[len]" to the vterm.
*/
static void
! 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);
*** ../vim-8.2.3596/src/version.c 2021-11-15 11:22:05.059277981 +0000
--- src/version.c 2021-11-15 17:11:37.442499072 +0000
***************
*** 759,760 ****
--- 759,762 ----
{ /* Add new patch number below this line */
+ /**/
+ 3597,
/**/
--
Individualists unite!
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20211115172547.F1DEB1C0333%40moolenaar.net.