Patch 8.1.0822
Problem:    Peeking and flushing output slows down execution.
Solution:   Do not update the mode message when global_busy is set.  Do not
            flush when only peeking for a character. (Ken Takata)
Files:      src/getchar.c, src/screen.c, src/proto/screen.pro, src/edit.c


*** ../vim-8.1.0821/src/getchar.c       2019-01-24 17:18:37.591462362 +0100
--- src/getchar.c       2019-01-25 22:11:09.128279171 +0100
***************
*** 3039,3047 ****
  
        /*
         * Always flush the output characters when getting input characters
!        * from the user.
         */
!       out_flush();
  
        /*
         * Fill up to a third of the buffer, because each character may be
--- 3039,3048 ----
  
        /*
         * Always flush the output characters when getting input characters
!        * from the user and not just peeking.
         */
!       if (wait_time == -1L || wait_time > 10L)
!           out_flush();
  
        /*
         * Fill up to a third of the buffer, because each character may be
*** ../vim-8.1.0821/src/screen.c        2019-01-24 18:20:14.436543394 +0100
--- src/screen.c        2019-01-25 22:23:24.083428734 +0100
***************
*** 10110,10115 ****
--- 10110,10135 ----
  }
  
  /*
+  * Return TRUE when postponing displaying the mode message: when not redrawing
+  * or inside a mapping.
+  */
+     int
+ skip_showmode()
+ {
+     // Call char_avail() only when we are going to show something, because it
+     // takes a bit of time.  redrawing() may also call char_avail_avail().
+     if (global_busy
+           || msg_silent != 0
+           || !redrawing()
+           || (char_avail() && !KeyTyped))
+     {
+       redraw_cmdline = TRUE;          // show mode later
+       return TRUE;
+     }
+     return FALSE;
+ }
+ 
+ /*
   * Show the current mode and ruler.
   *
   * If clear_cmdline is TRUE, clear the rest of the cmdline.
***************
*** 10135,10150 ****
                || VIsual_active));
      if (do_mode || reg_recording != 0)
      {
!       /*
!        * Don't show mode right now, when not redrawing or inside a mapping.
!        * Call char_avail() only when we are going to show something, because
!        * it takes a bit of time.
!        */
!       if (!redrawing() || (char_avail() && !KeyTyped) || msg_silent != 0)
!       {
!           redraw_cmdline = TRUE;              /* show mode later */
!           return 0;
!       }
  
        nwr_save = need_wait_return;
  
--- 10155,10162 ----
                || VIsual_active));
      if (do_mode || reg_recording != 0)
      {
!       if (skip_showmode())
!           return 0;           // show mode later
  
        nwr_save = need_wait_return;
  
*** ../vim-8.1.0821/src/proto/screen.pro        2019-01-11 20:34:18.300314693 
+0100
--- src/proto/screen.pro        2019-01-25 22:22:17.887869921 +0100
***************
*** 49,54 ****
--- 49,55 ----
  int win_del_lines(win_T *wp, int row, int line_count, int invalid, int 
mayclear, int clear_attr);
  int screen_ins_lines(int off, int row, int line_count, int end, int 
clear_attr, win_T *wp);
  int screen_del_lines(int off, int row, int line_count, int end, int force, 
int clear_attr, win_T *wp);
+ int skip_showmode(void);
  int showmode(void);
  void unshowmode(int force);
  void clearmode(void);
*** ../vim-8.1.0821/src/edit.c  2019-01-24 15:04:44.662887892 +0100
--- src/edit.c  2019-01-25 22:23:48.535265639 +0100
***************
*** 8722,8728 ****
       */
      if (reg_recording != 0 || restart_edit != NUL)
        showmode();
!     else if (p_smd)
        msg("");
  
      return TRUE;          /* exit Insert mode */
--- 8722,8728 ----
       */
      if (reg_recording != 0 || restart_edit != NUL)
        showmode();
!     else if (p_smd && !skip_showmode())
        msg("");
  
      return TRUE;          /* exit Insert mode */
*** ../vim-8.1.0821/src/version.c       2019-01-25 21:52:12.190931859 +0100
--- src/version.c       2019-01-25 22:28:55.492398277 +0100
***************
*** 789,790 ****
--- 789,792 ----
  {   /* Add new patch number below this line */
+ /**/
+     822,
  /**/

-- 
Overflow on /dev/null, please empty the bit bucket.

 /// 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