Patch 8.2.2704
Problem:    Adding a lot of completions can be a bit slow.
Solution:   Use fast_breakcheck() instead of ui_breakcheck() when adding a
            list of completions. (Ben Jackson, closes #8061)
Files:      src/insexpand.c


*** ../vim-8.2.2703/src/insexpand.c     2021-01-29 21:47:20.485738910 +0100
--- src/insexpand.c     2021-04-03 20:11:22.095127230 +0200
***************
*** 118,123 ****
--- 118,124 ----
  # define CP_CONT_S_IPOS           4   // use CONT_S_IPOS for compl_cont_status
  # define CP_EQUAL         8   // ins_compl_equal() always returns TRUE
  # define CP_ICASE         16  // ins_compl_equal() ignores case
+ # define CP_FAST          32  // use fast_breakcheck instead of ui_breakcheck
  
  static char e_hitend[] = N_("Hit end of paragraph");
  # ifdef FEAT_COMPL_FUNC
***************
*** 790,796 ****
  
      for (i = 0; i < num_matches && add_r != FAIL; i++)
        if ((add_r = ins_compl_add(matches[i], -1, NULL, NULL, NULL, dir,
!                                          icase ? CP_ICASE : 0, FALSE)) == OK)
            // if dir was BACKWARD then honor it just once
            dir = FORWARD;
      FreeWild(num_matches, matches);
--- 791,797 ----
  
      for (i = 0; i < num_matches && add_r != FAIL; i++)
        if ((add_r = ins_compl_add(matches[i], -1, NULL, NULL, NULL, dir,
!                              CP_FAST | (icase ? CP_ICASE : 0), FALSE)) == OK)
            // if dir was BACKWARD then honor it just once
            dir = FORWARD;
      FreeWild(num_matches, matches);
***************
*** 1567,1573 ****
      // Respect the 'backspace' option.
      if ((int)(p - line) - (int)compl_col < 0
            || ((int)(p - line) - (int)compl_col == 0
!               && ctrl_x_mode != CTRL_X_OMNI) || ctrl_x_mode == CTRL_X_EVAL
            || (!can_bs(BS_START) && (int)(p - line) - (int)compl_col
                                                        - compl_length < 0))
        return K_BS;
--- 1568,1575 ----
      // Respect the 'backspace' option.
      if ((int)(p - line) - (int)compl_col < 0
            || ((int)(p - line) - (int)compl_col == 0
!                                                && ctrl_x_mode != CTRL_X_OMNI)
!           || ctrl_x_mode == CTRL_X_EVAL
            || (!can_bs(BS_START) && (int)(p - line) - (int)compl_col
                                                        - compl_length < 0))
        return K_BS;
***************
*** 2271,2284 ****
   * If the given string is already in the list of completions, then return
   * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
   * maybe because alloc() returns NULL, then FAIL is returned.
   */
      static int
! ins_compl_add_tv(typval_T *tv, int dir)
  {
      char_u    *word;
      int               dup = FALSE;
      int               empty = FALSE;
!     int               flags = 0;
      char_u    *(cptext[CPT_COUNT]);
      typval_T  user_data;
  
--- 2273,2287 ----
   * If the given string is already in the list of completions, then return
   * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
   * maybe because alloc() returns NULL, then FAIL is returned.
+  * When "fast" is TRUE use fast_breakcheck() instead of ui_breakcheck().
   */
      static int
! ins_compl_add_tv(typval_T *tv, int dir, int fast)
  {
      char_u    *word;
      int               dup = FALSE;
      int               empty = FALSE;
!     int               flags = fast ? CP_FAST : 0;
      char_u    *(cptext[CPT_COUNT]);
      typval_T  user_data;
  
***************
*** 2329,2335 ****
      CHECK_LIST_MATERIALIZE(list);
      FOR_ALL_LIST_ITEMS(list, li)
      {
!       if (ins_compl_add_tv(&li->li_tv, dir) == OK)
            // if dir was BACKWARD then honor it just once
            dir = FORWARD;
        else if (did_emsg)
--- 2332,2338 ----
      CHECK_LIST_MATERIALIZE(list);
      FOR_ALL_LIST_ITEMS(list, li)
      {
!       if (ins_compl_add_tv(&li->li_tv, dir, TRUE) == OK)
            // if dir was BACKWARD then honor it just once
            dir = FORWARD;
        else if (did_emsg)
***************
*** 2391,2397 ****
      if (p_ic)
        flags |= CP_ICASE;
      if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
!                                 -1, NULL, NULL, NULL, 0, flags, FALSE) != OK)
        return;
  
      ctrl_x_mode = CTRL_X_EVAL;
--- 2394,2401 ----
      if (p_ic)
        flags |= CP_ICASE;
      if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
!                                             -1, NULL, NULL, NULL, 0,
!                                             flags | CP_FAST, FALSE) != OK)
        return;
  
      ctrl_x_mode = CTRL_X_EVAL;
***************
*** 2461,2467 ****
      void
  f_complete_add(typval_T *argvars, typval_T *rettv)
  {
!     rettv->vval.v_number = ins_compl_add_tv(&argvars[0], 0);
  }
  
  /*
--- 2465,2471 ----
      void
  f_complete_add(typval_T *argvars, typval_T *rettv)
  {
!     rettv->vval.v_number = ins_compl_add_tv(&argvars[0], 0, FALSE);
  }
  
  /*
*** ../vim-8.2.2703/src/version.c       2021-04-03 19:32:40.750286283 +0200
--- src/version.c       2021-04-03 20:12:53.262866262 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     2704,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
53. To find out what time it is, you send yourself an e-mail and check the
    "Date:" field.

 /// 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/202104031813.133IDtaS2592349%40masaka.moolenaar.net.

Raspunde prin e-mail lui