]> granicus.if.org Git - vim/commitdiff
Make CTRL-L in command line mode respect 'ignorecase' and 'smartcase'. (Martin
authorBram Moolenaar <Bram@vim.org>
Sun, 11 Jul 2010 18:46:53 +0000 (20:46 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 11 Jul 2010 18:46:53 +0000 (20:46 +0200)
Toft)

runtime/doc/cmdline.txt
runtime/doc/options.txt
runtime/doc/todo.txt
src/ex_getln.c
src/misc1.c
src/proto/search.pro
src/search.c

index 8abb16b8c4a6ed639e675070d029d526c1085ab5..08fb10fcc140fd2a870c5abca8d85b44b6ba896d 100644 (file)
@@ -416,7 +416,10 @@ CTRL-L             A match is done on the pattern in front of the cursor.  If
                than the pattern, no completion is done.
                When 'incsearch' is set, entering a search pattern for "/" or
                "?" and the current match is displayed then CTRL-L will add
-               one character from the end of the current match.
+               one character from the end of the current match.  If
+               'ignorecase' and 'smartcase' are set and the command line has
+               no uppercase characters, the added character is converted to
+               lowercase.
 
 The 'wildchar' option defaults to <Tab> (CTRL-E when in Vi compatible mode; in
 a previous version <Esc> was used).  In the pattern standard wildcards '*' and
index cf37387631315baaa8d1227c88285406ff97ec68..d8f4dfbaf1d71d472b3907aafedd7ab0af26a387 100644 (file)
@@ -3976,7 +3976,9 @@ A jump table for the options with a short description can be found at |Q_op|.
        The highlighting can be set with the 'i' flag in 'highlight'.
        See also: 'hlsearch'.
        CTRL-L can be used to add one character from after the current match
-       to the command line.
+       to the command line.  If 'ignorecase' and 'smartcase' are set and the
+       command line has no uppercase characters, the added character is
+       converted to lowercase.
        CTRL-R CTRL-W can be used to add the word at the end of the current
        match, excluding the characters that were already typed.
        NOTE: This option is reset when 'compatible' is set.
index 24799a36ce1bcf99624981048d0ca884c1dad2b4..e8a42a51d59e97cc94c3ef3549514619b6753782 100644 (file)
@@ -1088,14 +1088,16 @@ Patch to support horizontal scroll wheel in GTK. Untested. (Bjorn Winckler,
 2010 Jun 30)
 
 
+Before (beta) release 7.3:
+- Add fixes for 7.2 to version7.txt
+- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
+
 Vim 7.3:
+  configure: -pthread appears in cproto arguments, from GTK
 - Soon: remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
 - Conceal feature: no update when moving to another window. (Dominique Pelle,
   2010 Jul 5)  Vince will look into it.
 Patches to possibly include:
-- Patch for gtk main_loop() to enable GtkFileChooser. (James Vega, 2010 Jun 28)
-    Same as this one?  GTK: file chooser is disabled.  Patch by Tim Starling,
-    2009 Nov 13.
 - Patch to make CTRL-L work better with 'ignorecase' and 'smartcase'. (Martin
   Toft, 2010 Jun 8, Jun 16, Jun 30)
 - Patch to add diff functionality to 2html.vim. (Christian Brabandt, 2009 Dec
@@ -1157,9 +1159,6 @@ Probably not now:
 - Use timestamps for undo, so that a version a certain time ago can be found
   and info before some time/date can be flushed. 'undopersist' gives maximum
   time to keep undo: "3h", "1d", "2w", "1y", etc.
-Before (beta) release:
-- Add fixes for 7.2 to version7.txt
-- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
 
 
 More patches:
index e6ed44a41ee06c61fa4a4e16a81c2f9f9d00d332..b2e89e19271c5987ac2d34edf99d4607566fade6 100644 (file)
@@ -1411,6 +1411,11 @@ getcmdline(firstc, count, indent)
                                   && !equalpos(curwin->w_cursor, old_cursor))
                    {
                        c = gchar_cursor();
+                       /* If 'ignorecase' and 'smartcase' are set and the
+                       * command line has no uppercase characters, convert
+                       * the character to lowercase */
+                       if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff))
+                           c = MB_TOLOWER(c);
                        if (c != NUL)
                        {
                            if (c == firstc || vim_strchr((char_u *)(
index 31511249b7cc0f1d9478bc1f7bc2bd03770b95fb..d87696d5cd92ff3a7afdb0e2239cbbe9d88261ae 100644 (file)
@@ -9606,7 +9606,7 @@ FreeWild(count, files)
 }
 
 /*
- * return TRUE when need to go to Insert mode because of 'insertmode'.
+ * Return TRUE when need to go to Insert mode because of 'insertmode'.
  * Don't do this when still processing a command or a mapping.
  * Don't do this when inside a ":normal" command.
  */
index 76ae0541982b7b51eb3637905181c9509b452c03..7f3947ca601f17e651819209f8b0a4fc620f6ff2 100644 (file)
@@ -6,6 +6,7 @@ void save_search_patterns __ARGS((void));
 void restore_search_patterns __ARGS((void));
 void free_search_patterns __ARGS((void));
 int ignorecase __ARGS((char_u *pat));
+int pat_has_uppercase __ARGS((char_u *pat));
 char_u *last_search_pat __ARGS((void));
 void reset_search_dir __ARGS((void));
 void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
index 3ad9140c12fff6e5bfb5dfe9a9aef8b9100f081f..86958d47711415acdfdba7686c132e3cc7774bc2 100644 (file)
@@ -365,56 +365,58 @@ free_search_patterns()
 ignorecase(pat)
     char_u     *pat;
 {
-    char_u     *p;
-    int                ic;
+    int                ic = p_ic;
 
-    ic = p_ic;
     if (ic && !no_smartcase && p_scs
 #ifdef FEAT_INS_EXPAND
                                && !(ctrl_x_mode && curbuf->b_p_inf)
 #endif
                                                                    )
+       ic = !pat_has_uppercase(pat);
+    no_smartcase = FALSE;
+
+    return ic;
+}
+
+/*
+ * Return TRUE if patter "pat" has an uppercase character.
+ */
+    int
+pat_has_uppercase(pat)
+    char_u     *pat;
+{
+    char_u *p = pat;
+
+    while (*p != NUL)
     {
-       /* don't ignore case if pattern has uppercase */
-       for (p = pat; *p; )
-       {
 #ifdef FEAT_MBYTE
-           int         l;
+       int             l;
 
-           if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
-           {
-               if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
-               {
-                   ic = FALSE;
-                   break;
-               }
-               p += l;
-           }
-           else
+       if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+       {
+           if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
+               return TRUE;
+           p += l;
+       }
+       else
 #endif
-                if (*p == '\\')
-               {
-                   if (p[1] == '_' && p[2] != NUL)  /* skip "\_X" */
-                       p += 3;
-                   else if (p[1] == '%' && p[2] != NUL)  /* skip "\%X" */
-                       p += 3;
-                   else if (p[1] != NUL)  /* skip "\X" */
-                       p += 2;
-                   else
-                       p += 1;
-               }
-               else if (MB_ISUPPER(*p))
-               {
-                   ic = FALSE;
-                   break;
-               }
-               else
-                   ++p;
+            if (*p == '\\')
+       {
+           if (p[1] == '_' && p[2] != NUL)  /* skip "\_X" */
+               p += 3;
+           else if (p[1] == '%' && p[2] != NUL)  /* skip "\%X" */
+               p += 3;
+           else if (p[1] != NUL)  /* skip "\X" */
+               p += 2;
+           else
+               p += 1;
        }
+       else if (MB_ISUPPER(*p))
+           return TRUE;
+       else
+           ++p;
     }
-    no_smartcase = FALSE;
-
-    return ic;
+    return FALSE;
 }
 
     char_u *