]> granicus.if.org Git - vim/commitdiff
updated for version 7.0-035 v7.0.035
authorBram Moolenaar <Bram@vim.org>
Fri, 23 Jun 2006 19:36:29 +0000 (19:36 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 23 Jun 2006 19:36:29 +0000 (19:36 +0000)
src/edit.c
src/version.c

index 3f933c14c27c4b6e2e7dde740520e46ebfce766c..bf0f01420dd564542ebd7a2163ad01b793581915 100644 (file)
@@ -4166,8 +4166,6 @@ ins_compl_next(allow_get_expansion, count, insert_match)
     {
        if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
        {
-           if (compl_pending != 0)
-               --compl_pending;
            compl_shown_match = compl_shown_match->cp_next;
            found_end = (compl_first_match != NULL
                           && (compl_shown_match->cp_next == compl_first_match
@@ -4176,14 +4174,24 @@ ins_compl_next(allow_get_expansion, count, insert_match)
        else if (compl_shows_dir == BACKWARD
                                        && compl_shown_match->cp_prev != NULL)
        {
-           if (compl_pending != 0)
-               ++compl_pending;
            found_end = (compl_shown_match == compl_first_match);
            compl_shown_match = compl_shown_match->cp_prev;
            found_end |= (compl_shown_match == compl_first_match);
        }
        else
        {
+           if (!allow_get_expansion)
+           {
+               if (advance)
+               {
+                   if (compl_shows_dir == BACKWARD)
+                       compl_pending -= todo + 1;
+                   else
+                       compl_pending += todo + 1;
+               }
+               return -1;
+           }
+
            if (advance)
            {
                if (compl_shows_dir == BACKWARD)
@@ -4191,14 +4199,27 @@ ins_compl_next(allow_get_expansion, count, insert_match)
                else
                    ++compl_pending;
            }
-           if (!allow_get_expansion)
-               return -1;
 
            /* Find matches. */
            num_matches = ins_compl_get_exp(&compl_startpos);
-           if (compl_pending != 0 && compl_direction == compl_shows_dir
+
+           /* handle any pending completions */
+           while (compl_pending != 0 && compl_direction == compl_shows_dir
                                                                   && advance)
-               compl_shown_match = compl_curr_match;
+           {
+               if (compl_pending > 0 && compl_shown_match->cp_next != NULL)
+               {
+                   compl_shown_match = compl_shown_match->cp_next;
+                   --compl_pending;
+               }
+               if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
+               {
+                   compl_shown_match = compl_shown_match->cp_prev;
+                   ++compl_pending;
+               }
+               else
+                   break;
+           }
            found_end = FALSE;
        }
        if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
@@ -4307,9 +4328,9 @@ ins_compl_check_keys(frequency)
        return;
     count = 0;
 
-    ++no_mapping;
+    /* Check for a typed key.  Do use mappings, otherwise vim_is_ctrl_x_key()
+     * can't do its work correctly. */
     c = vpeekc_any();
-    --no_mapping;
     if (c != NUL)
     {
        if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R)
@@ -4319,12 +4340,27 @@ ins_compl_check_keys(frequency)
            (void)ins_compl_next(FALSE, ins_compl_key2count(c),
                                                    c != K_UP && c != K_DOWN);
        }
-       else if (c != Ctrl_R)
-           compl_interrupted = TRUE;
+       else
+       {
+           /* Need to get the character to have KeyTyped set.  We'll put it
+            * back with vungetc() below. */
+           c = safe_vgetc();
+
+           /* Don't interrupt completion when the character wasn't typed,
+            * e.g., when doing @q to replay keys. */
+           if (c != Ctrl_R && KeyTyped)
+               compl_interrupted = TRUE;
+
+           vungetc(c);
+       }
     }
     if (compl_pending != 0 && !got_int)
-       (void)ins_compl_next(FALSE, compl_pending > 0
-                                     ? compl_pending : -compl_pending, TRUE);
+    {
+       int todo = compl_pending > 0 ? compl_pending : -compl_pending;
+
+       compl_pending = 0;
+       (void)ins_compl_next(FALSE, todo, TRUE);
+    }
 }
 
 /*
index c978d0092e71e09702d93939c7bcd88125487cd1..6c3a4bea839f2a4ed4dd481ffe12139eecd7d30a 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    35,
 /**/
     34,
 /**/