]> granicus.if.org Git - mutt/commitdiff
Perform case insensitive string search if pattern is lower case
authorRocco Rutte <pdmef@gmx.net>
Tue, 31 Mar 2009 12:50:05 +0000 (14:50 +0200)
committerRocco Rutte <pdmef@gmx.net>
Tue, 31 Mar 2009 12:50:05 +0000 (14:50 +0200)
...since we do that for regex patterns already.
It doesn't work for IMAP server-side searches.

UPDATING
doc/manual.xml.head
mutt.h
pattern.c

index 491b40fefdb3e45ed39db6ae0e9174404da6693c..fe5860d4c00c1dc96468689c53ea0dedf7e7ebd6 100644 (file)
--- a/UPDATING
+++ b/UPDATING
@@ -5,6 +5,8 @@ The keys used are:
   !: modified feature, -: deleted feature, +: new feature
 
 hg tip:
+  + lower case patterns for string searches perform case-insensitive
+    search as regex patterns do (except IMAP)
   + $ssl_verify_dates controls whether mutt checks the validity period of
     SSL certificates
   + $ssl_verify_hostname controls whether mutt will accept certificates whose
index fde989afc6fe00f690cd911b4aee0e23524616ef..423251171dde3bbe9cd1b71e6cb8690b56c7c89b 100644 (file)
@@ -7006,9 +7006,9 @@ message bodies since a larger amount of input has to be searched.
 </para>
 
 <para>
-Please note that string search is an exact case-sensitive search
-while a regular expression search with only lower-case letters performs
-a case-insensitive search.
+As for regular expressions, a lower case string search pattern makes
+Mutt perform a case-insensitive search except for IMAP (because for IMAP
+Mutt performs server-side searches which don't support case-insensivity).
 </para>
 
 </sect1>
diff --git a/mutt.h b/mutt.h
index 87b4178515ff5631866433d3672ffaadc1e1baa6..5ee1f1ba68ce91bc02694d8cb9c0ae7dad89da6f 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -817,6 +817,7 @@ typedef struct pattern_t
   unsigned int alladdr : 1;
   unsigned int stringmatch : 1;
   unsigned int groupmatch : 1;
+  unsigned int ign_case : 1;           /* ignore case for local stringmatch searches */
   int min;
   int max;
   struct pattern_t *next;
index 22ff36911b747c7a53e64718a31a6c1d2d0291f3..24753ee1278b2fd1b0bc9c6ced6b6d1ca20d90df 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -277,6 +277,7 @@ static int eat_regexp (pattern_t *pat, BUFFER *s, BUFFER *err)
   if (pat->stringmatch)
   {
     pat->p.str = safe_strdup (buf.data);
+    pat->ign_case = mutt_which_case (buf.data) == REG_ICASE;
     FREE (&buf.data);
   }
   else if (pat->groupmatch)
@@ -700,7 +701,8 @@ static int eat_date (pattern_t *pat, BUFFER *s, BUFFER *err)
 static int patmatch (const pattern_t* pat, const char* buf)
 {
   if (pat->stringmatch)
-    return !strstr (buf, pat->p.str);
+    return pat->ign_case ? !strcasestr (buf, pat->p.str) :
+                          !strstr (buf, pat->p.str);
   else if (pat->groupmatch)
     return !mutt_group_match (pat->p.g, buf);
   else