Make CTRL-L in command line mode respect 'ignorecase' and 'smartcase'. (Martin
Toft)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index e6ed44a..b2e89e1 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1411,6 +1411,11 @@
 				   && !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 *)(
diff --git a/src/misc1.c b/src/misc1.c
index 3151124..d87696d 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -9606,7 +9606,7 @@
 }
 
 /*
- * 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.
  */
diff --git a/src/proto/search.pro b/src/proto/search.pro
index 76ae054..7f3947c 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -6,6 +6,7 @@
 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));
diff --git a/src/search.c b/src/search.c
index 3ad9140..86958d4 100644
--- a/src/search.c
+++ b/src/search.c
@@ -365,58 +365,60 @@
 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
 								    )
-    {
-	/* don't ignore case if pattern has uppercase */
-	for (p = pat; *p; )
-	{
-#ifdef FEAT_MBYTE
-	    int		l;
-
-	    if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
-	    {
-		if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
-		{
-		    ic = FALSE;
-		    break;
-		}
-		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;
-	}
-    }
+	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)
+    {
+#ifdef FEAT_MBYTE
+	int		l;
+
+	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))
+	    return TRUE;
+	else
+	    ++p;
+    }
+    return FALSE;
+}
+
     char_u *
 last_search_pat()
 {