Fixed the help for the -n option.
[selector.git] / selector.c
index 5f6203d..489386a 100644 (file)
@@ -188,7 +188,7 @@ void usage(FILE *out) {
   fprintf(out, " -a, --case-sensitive\n");
   fprintf(out, "         start in case sensitive mode\n");
   fprintf(out, " -n, --exclamation-negates\n");
-  fprintf(out, "         exclamation points in substring requires the string to be absent\n");
+  fprintf(out, "         substrings starting with an exclamation mark have to be absent\n");
   fprintf(out, " -m, --monochrome\n");
   fprintf(out, "         monochrome mode\n");
   fprintf(out, " -q, --no-beep\n");
@@ -302,15 +302,15 @@ int add_and_get_previous_index(struct hash_table_t *hash_table,
  A matcher matches either with a collection of substrings, or with a
  regexp */
 
-typedef struct {
+struct matcher {
   regex_t preg;
   int regexp_error;
   int nb_patterns;
   int case_sensitive;
   char *splitted_patterns, **patterns;
-} matcher_t;
+};
 
-int match(matcher_t *matcher, char *string) {
+int match(struct matcher *matcher, char *string) {
   int n;
   if(matcher->nb_patterns >= 0) {
     if(matcher->case_sensitive) {
@@ -348,7 +348,7 @@ int match(matcher_t *matcher, char *string) {
   }
 }
 
-void free_matcher(matcher_t *matcher) {
+void free_matcher(struct matcher *matcher) {
   if(matcher->nb_patterns < 0) {
     if(!matcher->regexp_error) regfree(&matcher->preg);
   } else {
@@ -357,7 +357,7 @@ void free_matcher(matcher_t *matcher) {
   }
 }
 
-void initialize_matcher(matcher_t *matcher,
+void initialize_matcher(struct matcher *matcher,
                         int use_regexp, int case_sensitive,
                         const char *pattern) {
   const char *s;
@@ -460,14 +460,14 @@ void kill_after_cursor(char *buffer, int *position) {
 
 /*********************************************************************/
 
-int previous_visible(int current_line, char **lines, matcher_t *matcher) {
+int previous_visible(int current_line, char **lines, struct matcher *matcher) {
   int line = current_line - 1;
   while(line >= 0 && !match(matcher, lines[line])) line--;
   return line;
 }
 
 int next_visible(int current_line, int nb_lines, char **lines,
-                 matcher_t *matcher) {
+                 struct matcher *matcher) {
   int line = current_line + 1;
   while(line < nb_lines && !match(matcher, lines[line])) line++;
 
@@ -498,7 +498,7 @@ void update_screen(int *current_focus_line, int *displayed_focus_line,
                    char *pattern) {
 
   char buffer[BUFFER_SIZE];
-  matcher_t matcher;
+  struct matcher matcher;
   int k, l, m;
   int console_width, console_height;
   int nb_printed_lines = 0;
@@ -603,32 +603,24 @@ void update_screen(int *current_focus_line, int *displayed_focus_line,
         if(match(&matcher, lines[l])) {
           int k = 0;
 
-          while(lines[l][k] && k < BUFFER_SIZE - 2 && k < console_width - 2) {
+          while(lines[l][k] && k < BUFFER_SIZE - 2 && k < console_width) {
             buffer[k] = lines[l][k];
             k++;
           }
 
-          /* We fill the rest of the line with blanks if this is the
-             highlighted line */
+          /* Highlight the highlighted line ... */
 
           if(l == new_focus_line) {
             while(k < console_width) {
               buffer[k++] = ' ';
             }
-          }
-
-          buffer[k++] = '\n';
-          buffer[k++] = '\0';
-
-          clrtoeol();
-
-          /* Highlight the highlighted line ... */
-
-          if(l == new_focus_line) {
             attron(attr_focus_line);
             addnstr(buffer, console_width);
             attroff(attr_focus_line);
           } else {
+            buffer[k++] = '\n';
+            buffer[k++] = '\0';
+            /* clrtoeol(); */
             addnstr(buffer, console_width);
           }