or matching the regexp.
 
 The ^R key switches between the standard multi-substring mode and the
-regexp mode.
+regexp mode, and ^I between the case-sensitive and case-insensitive
+modes.
 
 The main usage of selector is as an efficient search in the shell
 command history. With the correct option, it will inject the selected
 
   }
 }
 
+int string_to_positive_integer(char *string) {
+  int error = 0;
+  int result = 0;
+
+  if(*string) {
+    for(char *s = string; *s; s++) {
+      if(*s >= '0' && *s <= '9') {
+        result = result * 10 + int(*s - '0');
+      } else error = 1;
+    }
+  } else error = 1;
+
+  if(error) {
+    cerr << "Value `" << string << "' is not a positive integer." << endl;
+    exit(1);
+  }
+
+  return result;
+}
+
 //////////////////////////////////////////////////////////////////////
 // A quick and dirty hash table
 
     addstr(" [regexp]");
   }
 
+  if(case_sensitive) {
+    addstr(" [case]");
+  }
+
   move(0, cursor_x);
 
   if(with_colors) {
 
     else if(strcmp(argv[i], "-l") == 0) {
       check_opt(argc, argv, i, 1, "<maximum number of lines>");
-      nb_lines_max = atoi(argv[i+1]);
+      nb_lines_max = string_to_positive_integer(argv[i+1]);
       i += 2;
     }
 
     else if(strcmp(argv[i], "-c") == 0) {
       check_opt(argc, argv, i, 4, "<fg modeline> <bg modeline> <fg highlight> <bg highlight>");
-      color_fg_modeline = atoi(argv[i+1]);
-      color_bg_modeline = atoi(argv[i+2]);
-      color_fg_highlight = atoi(argv[i+3]);
-      color_bg_highlight = atoi(argv[i+4]);
+      color_fg_modeline = string_to_positive_integer(argv[i + 1]);
+      color_bg_modeline = string_to_positive_integer(argv[i + 2]);
+      color_fg_highlight = string_to_positive_integer(argv[i + 3]);
+      color_bg_highlight = string_to_positive_integer(argv[i + 4]);
       i += 5;
     }
 
       use_regexp = !use_regexp;
     }
 
+    else if(key == '\011') { // ^R
+      case_sensitive = !case_sensitive;
+    }
+
     else if(key == '\025') { // ^U
       kill_before_cursor(pattern, &cursor_position);
     }
       }
       out.flush();
     }
-
+  } else {
+    cout << "Aborted." << endl;
   }
 
   for(int l = 0; l < nb_lines; l++) {