To: vim_dev@googlegroups.com Subject: Patch 8.1.1118 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 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 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 -- Bram@Moolenaar.net -- 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 ///