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.