Patch 9.0.0394
Problem:    Cygwin: multibyte characters may be broken in terminal window.
Solution:   Adjust how to read and write on the channel. (Ken Takata,
            closes #11063)
Files:      src/channel.c


*** ../vim-9.0.0393/src/channel.c       2022-09-01 16:00:49.730496296 +0100
--- src/channel.c       2022-09-06 11:20:55.580107630 +0100
***************
*** 3589,3594 ****
--- 3589,3612 ----
  // Buffer size for reading incoming messages.
  #define MAXMSGSIZE 4096
  
+ /*
+  * Check if there are remaining data that should be written for "in_part".
+  */
+     static int
+ is_channel_write_remaining(chanpart_T *in_part)
+ {
+     buf_T *buf = in_part->ch_bufref.br_buf;
+ 
+     if (in_part->ch_writeque.wq_next != NULL)
+       return TRUE;
+     if (buf == NULL)
+       return FALSE;
+     return in_part->ch_buf_append
+           ? (in_part->ch_buf_bot < buf->b_ml.ml_line_count)
+           : (in_part->ch_buf_top <= in_part->ch_buf_bot
+                           && in_part->ch_buf_top <= buf->b_ml.ml_line_count);
+ }
+ 
  #if defined(HAVE_SELECT)
  /*
   * Add write fds where we are waiting for writing to be possible.
***************
*** 3604,3611 ****
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
        if (in_part->ch_fd != INVALID_FD
!               && (in_part->ch_bufref.br_buf != NULL
!                   || in_part->ch_writeque.wq_next != NULL))
        {
            FD_SET((int)in_part->ch_fd, wfds);
            if ((int)in_part->ch_fd >= maxfd)
--- 3622,3628 ----
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
        if (in_part->ch_fd != INVALID_FD
!               && is_channel_write_remaining(in_part))
        {
            FD_SET((int)in_part->ch_fd, wfds);
            if ((int)in_part->ch_fd >= maxfd)
***************
*** 3629,3636 ****
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
        if (in_part->ch_fd != INVALID_FD
!               && (in_part->ch_bufref.br_buf != NULL
!                   || in_part->ch_writeque.wq_next != NULL))
        {
            in_part->ch_poll_idx = nfd;
            fds[nfd].fd = in_part->ch_fd;
--- 3646,3652 ----
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
        if (in_part->ch_fd != INVALID_FD
!               && is_channel_write_remaining(in_part))
        {
            in_part->ch_poll_idx = nfd;
            fds[nfd].fd = in_part->ch_fd;
***************
*** 3865,3872 ****
        // Store the read message in the queue.
        channel_save(channel, part, buf, len, FALSE, "RECV ");
        readlen += len;
-       if (len < MAXMSGSIZE)
-           break;      // did read everything that's available
      }
  
      // Reading a disconnection (readlen == 0), or an error.
--- 3881,3886 ----
*** ../vim-9.0.0393/src/version.c       2022-09-06 10:56:15.605981108 +0100
--- src/version.c       2022-09-06 11:25:54.719269866 +0100
***************
*** 705,706 ****
--- 705,708 ----
  {   /* Add new patch number below this line */
+ /**/
+     394,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
13. You refer to going to the bathroom as downloading.

 /// 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/20220906102733.D24631C0CE4%40moolenaar.net.

Raspunde prin e-mail lui