From e188c5c49589a4cdf2f459b72b5005e3f0e7762c Mon Sep 17 00:00:00 2001 From: Rocco Rutte Date: Tue, 31 Mar 2009 14:50:05 +0200 Subject: [PATCH] Perform case insensitive string search if pattern is lower case ...since we do that for regex patterns already. It doesn't work for IMAP server-side searches. --- UPDATING | 2 ++ doc/manual.xml.head | 6 +++--- mutt.h | 1 + pattern.c | 4 +++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/UPDATING b/UPDATING index 491b40fe..fe5860d4 100644 --- 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 diff --git a/doc/manual.xml.head b/doc/manual.xml.head index fde989af..42325117 100644 --- a/doc/manual.xml.head +++ b/doc/manual.xml.head @@ -7006,9 +7006,9 @@ message bodies since a larger amount of input has to be searched. -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). diff --git a/mutt.h b/mutt.h index 87b41785..5ee1f1ba 100644 --- 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; diff --git a/pattern.c b/pattern.c index 22ff3691..24753ee1 100644 --- 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 -- 2.40.0