Added the -u option.
authorFrancois Fleuret <francois@fleuret.org>
Tue, 14 Jun 2011 06:44:01 +0000 (08:44 +0200)
committerFrancois Fleuret <francois@fleuret.org>
Tue, 14 Jun 2011 06:44:01 +0000 (08:44 +0200)
selector.1
selector.c

index 5659e6c..088ee4d 100644 (file)
@@ -84,6 +84,10 @@ start in regexp mode
 \fB-a\fR, \fB--case-sensitive\fR
 start in case sensitive mode
 .TP
+\fB-u\fR, \fB--upper-case-makes-case-sensitive\fR
+using an upper case in the matching string makes the matching
+case-sensitive
+.TP
 \fB-n\fR, \fB--exclamation-negates\fR
 substrings starting with an exclamation mark must be absent for a line
 to match
index 489386a..646cffa 100644 (file)
@@ -66,6 +66,7 @@ int case_sensitive = 0;
 char *title = 0;
 int error_flash = 0;
 int exclamation_negates = 0;
+int upper_caps_makes_case_sensitive = 0;
 
 int attr_modeline, attr_focus_line, attr_error;
 
@@ -187,6 +188,9 @@ void usage(FILE *out) {
   fprintf(out, "         start in regexp mode\n");
   fprintf(out, " -a, --case-sensitive\n");
   fprintf(out, "         start in case sensitive mode\n");
+  fprintf(out, " -u, --upper-case-makes-case-sensitive\n");
+  fprintf(out, "         using an upper case character in the matching string makes\n");
+  fprintf(out, "         the matching case-sensitive\n");
   fprintf(out, " -n, --exclamation-negates\n");
   fprintf(out, "         substrings starting with an exclamation mark have to be absent\n");
   fprintf(out, " -m, --monochrome\n");
@@ -365,12 +369,20 @@ void initialize_matcher(struct matcher *matcher,
   int n;
 
   if(use_regexp) {
+    matcher->case_sensitive = case_sensitive;
     matcher->nb_patterns = -1;
     matcher->regexp_error = regcomp(&matcher->preg, pattern,
                                     case_sensitive ? 0 : REG_ICASE);
   } else {
     matcher->regexp_error = 0;
     matcher->nb_patterns = 1;
+
+    if(upper_caps_makes_case_sensitive) {
+      for(s = pattern; *s && !case_sensitive; s++) {
+        case_sensitive = (*s >= 'A' && *s <= 'Z');
+      }
+    }
+
     matcher->case_sensitive = case_sensitive;
 
     for(s = pattern; *s; s++) {
@@ -694,13 +706,13 @@ void update_screen(int *current_focus_line, int *displayed_focus_line,
   /* Add a few info about the mode we are in (regexp and/or case
      sensitive) */
 
-  if(use_regexp || case_sensitive) {
+  if(use_regexp || matcher.case_sensitive) {
     addstr(" [");
     if(use_regexp) {
       addstr("regexp");
     }
 
-    if(case_sensitive) {
+    if(matcher.case_sensitive) {
       if(use_regexp) {
         addstr(",");
       }
@@ -852,6 +864,7 @@ static struct option long_options[] = {
   { "remove-duplicates", no_argument, 0, 'd' },
   { "regexp", no_argument, 0, 'e' },
   { "case-sensitive", no_argument, 0, 'a' },
+  { "upper-case-makes-case-sensitive", no_argument, 0, 'u' },
   { "title", 1, 0, 't' },
   { "number-of-lines", 1, 0, 'l' },
   { "colors", 1, 0, 'c' },
@@ -893,7 +906,7 @@ int main(int argc, char **argv) {
 
   strcpy(output_filename, "");
 
-  while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeant:l:c:-h",
+  while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeaunt:l:c:-h",
                           long_options, NULL)) != -1) {
 
     switch(c) {
@@ -950,6 +963,10 @@ int main(int argc, char **argv) {
       case_sensitive = 1;
       break;
 
+    case 'u':
+      upper_caps_makes_case_sensitive = 1;
+      break;
+
     case 'n':
       exclamation_negates = 1;
       break;