Patch 8.1.1118
Problem:    A couple of conditions are hard to understand.
Solution:   Split the conditions into pieces. (Ozaki Kiichi, closes #3879)
Files:      src/getchar.c, src/os_unix.c


*** ../vim-8.1.1117/src/getchar.c       2019-03-30 18:46:57.348077402 +0100
--- src/getchar.c       2019-04-04 20:05:56.187300570 +0200
***************
*** 2030,2035 ****
--- 2030,2037 ----
             */
            for (;;)
            {
+               long        wait_time;
+ 
                /*
                 * ui_breakcheck() is slow, don't use it too often when
                 * inside a mapping.  But call it each time for typed
***************
*** 2828,2845 ****
                    // that has a <Nop> RHS.
                    timedout = FALSE;
  
                wait_tb_len = typebuf.tb_len;
                c = inchar(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len,
                        typebuf.tb_buflen - typebuf.tb_off - typebuf.tb_len - 1,
!                       !advance
!                           ? 0
!                           : ((typebuf.tb_len == 0
!                                   || !(p_timeout || (p_ttimeout
!                                              && keylen == KEYLEN_PART_KEY)))
!                                   ? -1L
!                                   : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
!                                           ? p_ttm
!                                           : p_tm)));
  
  #ifdef FEAT_CMDL_INFO
                if (i != 0)
--- 2830,2854 ----
                    // that has a <Nop> RHS.
                    timedout = FALSE;
  
+               if (advance)
+               {
+                   if (typebuf.tb_len == 0
+                           || !(p_timeout
+                                || (p_ttimeout && keylen == KEYLEN_PART_KEY)))
+                       // blocking wait
+                       wait_time = -1L;
+                   else if (keylen == KEYLEN_PART_KEY && p_ttm >= 0)
+                       wait_time = p_ttm;
+                   else
+                       wait_time = p_tm;
+               }
+               else
+                   wait_time = 0;
+ 
                wait_tb_len = typebuf.tb_len;
                c = inchar(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len,
                        typebuf.tb_buflen - typebuf.tb_off - typebuf.tb_len - 1,
!                       wait_time);
  
  #ifdef FEAT_CMDL_INFO
                if (i != 0)
*** ../vim-8.1.1117/src/os_unix.c       2019-03-30 18:46:57.360077328 +0100
--- src/os_unix.c       2019-04-04 20:08:33.214471353 +0200
***************
*** 5607,5625 ****
        close(fd_err[1]);
      if (channel != NULL)
      {
!       int in_fd = use_file_for_in || use_null_for_in
!                       ? INVALID_FD : fd_in[1] < 0 ? pty_master_fd : fd_in[1];
!       int out_fd = use_file_for_out || use_null_for_out
!                     ? INVALID_FD : fd_out[0] < 0 ? pty_master_fd : fd_out[0];
!       /* When using pty_master_fd only set it for stdout, do not duplicate it
!        * for stderr, it only needs to be read once. */
!       int err_fd = use_out_for_err || use_file_for_err || use_null_for_err
!                     ? INVALID_FD
!                     : fd_err[0] >= 0
!                        ? fd_err[0]
!                        : (out_fd == pty_master_fd
!                                ? INVALID_FD
!                                : pty_master_fd);
  
        channel_set_pipes(channel, in_fd, out_fd, err_fd);
        channel_set_job(channel, job, options);
--- 5607,5631 ----
        close(fd_err[1]);
      if (channel != NULL)
      {
!       int in_fd = INVALID_FD;
!       int out_fd = INVALID_FD;
!       int err_fd = INVALID_FD;
! 
!       if (!(use_file_for_in || use_null_for_in))
!           in_fd = fd_in[1] >= 0 ? fd_in[1] : pty_master_fd;
! 
!       if (!(use_file_for_out || use_null_for_out))
!           out_fd = fd_out[0] >= 0 ? fd_out[0] : pty_master_fd;
! 
!       // When using pty_master_fd only set it for stdout, do not duplicate
!       // it for stderr, it only needs to be read once.
!       if (!(use_out_for_err || use_file_for_err || use_null_for_err))
!       {
!           if (fd_err[0] >= 0)
!               err_fd = fd_err[0];
!           else if (out_fd != pty_master_fd)
!               err_fd = pty_master_fd;
!       }
  
        channel_set_pipes(channel, in_fd, out_fd, err_fd);
        channel_set_job(channel, job, options);
*** ../vim-8.1.1117/src/version.c       2019-04-04 19:06:11.147333162 +0200
--- src/version.c       2019-04-04 20:00:40.008936695 +0200
***************
*** 773,774 ****
--- 773,776 ----
  {   /* Add new patch number below this line */
+ /**/
+     1118,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
197. Your desk collapses under the weight of your computer peripherals.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui