Patch 8.2.4249
Problem:    The timeout limit for spell suggestions is always 5000 milli
            seconds.
Solution:   Add the "timeout" entry to 'spellsuggest'.
Files:      runtime/doc/options.txt, src/spellsuggest.c,
            src/testdir/test_spell.vim


*** ../vim-8.2.4248/runtime/doc/options.txt     2022-01-15 10:00:59.576603900 
+0000
--- runtime/doc/options.txt     2022-01-29 11:15:32.006269608 +0000
***************
*** 7348,7353 ****
--- 7372,7383 ----
                        suggestions is never more than the value of 'lines'
                        minus two.
  
+       timeout:{millisec}   Limit the time searching for suggestions to
+                       {millisec} milli seconds.  Applies to the following
+                       methods.  When omitted the limit is 5000. When
+                       negative there is no limit.  {only works when built
+                       with the +reltime feature}
+ 
        file:{filename} Read file {filename}, which must have two columns,
                        separated by a slash.  The first column contains the
                        bad word, the second column the suggested good word.
*** ../vim-8.2.4248/src/spellsuggest.c  2022-01-29 10:51:54.945759266 +0000
--- src/spellsuggest.c  2022-01-29 11:20:21.501470791 +0000
***************
*** 197,202 ****
--- 197,204 ----
  #define PFD_PREFIXTREE        0xfe    // walking through the prefix tree
  #define PFD_NOTSPECIAL        0xfd    // highest value that's not special
  
+ static long spell_suggest_timeout = 5000;
+ 
  static void spell_find_suggest(char_u *badptr, int badlen, suginfo_T *su, int 
maxcount, int banbadword, int need_cap, int interactive);
  #ifdef FEAT_EVAL
  static void spell_suggest_expr(suginfo_T *su, char_u *expr);
***************
*** 429,435 ****
        else if (STRCMP(buf, "double") == 0)
            f = SPS_DOUBLE;
        else if (STRNCMP(buf, "expr:", 5) != 0
!               && STRNCMP(buf, "file:", 5) != 0)
            f = -1;
  
        if (f == -1 || (sps_flags != 0 && f != 0))
--- 431,440 ----
        else if (STRCMP(buf, "double") == 0)
            f = SPS_DOUBLE;
        else if (STRNCMP(buf, "expr:", 5) != 0
!               && STRNCMP(buf, "file:", 5) != 0
!               && (STRNCMP(buf, "timeout:", 8) != 0
!                   || (!VIM_ISDIGIT(buf[8])
!                                 && !(buf[8] == '-' && VIM_ISDIGIT(buf[9])))))
            f = -1;
  
        if (f == -1 || (sps_flags != 0 && f != 0))
***************
*** 842,847 ****
--- 847,853 ----
      sps_copy = vim_strsave(p_sps);
      if (sps_copy == NULL)
        return;
+     spell_suggest_timeout = 5000;
  
      // Loop over the items in 'spellsuggest'.
      for (p = sps_copy; *p != NUL; )
***************
*** 864,869 ****
--- 870,878 ----
        else if (STRNCMP(buf, "file:", 5) == 0)
            // Use list of suggestions in a file.
            spell_suggest_file(su, buf + 5);
+       else if (STRNCMP(buf, "timeout:", 8) == 0)
+           // Limit the time searching for suggestions.
+           spell_suggest_timeout = atol((char *)buf + 8);
        else if (!did_intern)
        {
            // Use internal method once.
***************
*** 1325,1333 ****
        }
      }
  #ifdef FEAT_RELTIME
!     // The loop may take an indefinite amount of time. Break out after five
!     // sectonds. TODO: add an option for the time limit.
!     profile_setlimit(5000, &time_limit);
  #endif
  
      // Loop to find all suggestions.  At each round we either:
--- 1334,1343 ----
        }
      }
  #ifdef FEAT_RELTIME
!     // The loop may take an indefinite amount of time. Break out after some
!     // time.
!     if (spell_suggest_timeout > 0)
!       profile_setlimit(spell_suggest_timeout, &time_limit);
  #endif
  
      // Loop to find all suggestions.  At each round we either:
***************
*** 2659,2665 ****
                ui_breakcheck();
                breakcheckcount = 1000;
  #ifdef FEAT_RELTIME
!               if (profile_passed_limit(&time_limit))
                    got_int = TRUE;
  #endif
            }
--- 2669,2676 ----
                ui_breakcheck();
                breakcheckcount = 1000;
  #ifdef FEAT_RELTIME
!               if (spell_suggest_timeout > 0
!                                         && profile_passed_limit(&time_limit))
                    got_int = TRUE;
  #endif
            }
*** ../vim-8.2.4248/src/testdir/test_spell.vim  2022-01-29 10:51:54.949759202 
+0000
--- src/testdir/test_spell.vim  2022-01-29 11:20:58.868851404 +0000
***************
*** 446,451 ****
--- 446,461 ----
    delfunc MySuggest3
  endfunc
  
+ func Test_spellsuggest_timeout()
+   set spellsuggest=timeout:30
+   set spellsuggest=timeout:-123
+   set spellsuggest=timeout:999999
+   call assert_fails('set spellsuggest=timeout', 'E474:')
+   call assert_fails('set spellsuggest=timeout:x', 'E474:')
+   call assert_fails('set spellsuggest=timeout:-x', 'E474:')
+   call assert_fails('set spellsuggest=timeout:--9', 'E474:')
+ endfunc
+ 
  func Test_spellinfo()
    new
    let runtime = substitute($VIMRUNTIME, '\\', '/', 'g')
*** ../vim-8.2.4248/src/version.c       2022-01-29 10:59:48.505909435 +0000
--- src/version.c       2022-01-29 11:21:26.788388588 +0000
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     4249,
  /**/

-- 
Kiss me twice.  I'm schizophrenic.

 /// 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/20220129112242.B02561C1918%40moolenaar.net.

Raspunde prin e-mail lui