#include <getopt.h>
#include <limits.h>
-#define VERSION "1.1.4"
+#define VERSION "1.1.5"
#define BUFFER_SIZE 4096
int case_sensitive = 0;
char *title = 0;
int error_flash = 0;
-int exclamation_negates = 0;
int upper_caps_makes_case_sensitive = 0;
+int show_long_lines = 0;
int attr_modeline, attr_focus_line, attr_error;
fprintf(out, " start in regexp mode\n");
fprintf(out, " -a, --case-sensitive\n");
fprintf(out, " start in case sensitive mode\n");
+ fprintf(out, " -j, --show-long-lines\n");
+ fprintf(out, " print three dots at the end of truncated lines\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");
fprintf(out, " monochrome mode\n");
fprintf(out, " -q, --no-beep\n");
/* We came back to our original code, which means that the table
is full */
if(code == start) {
- printf("Full hash table (that should not happen)\n");
+ fprintf(stderr,
+ "Full hash table (that should not happen)\n");
exit(EXIT_FAILURE);
}
}
int n;
if(matcher->nb_patterns >= 0) {
if(matcher->case_sensitive) {
- if(exclamation_negates) {
- for(n = 0; n < matcher->nb_patterns; n++) {
- if(matcher->patterns[n][0] == '!') {
- if(strstr(string, matcher->patterns[n] + 1) != 0) return 0;
- } else {
- if(strstr(string, matcher->patterns[n]) == 0) return 0;
- }
- }
- } else {
- for(n = 0; n < matcher->nb_patterns; n++) {
- if(strstr(string, matcher->patterns[n]) == 0) return 0;
- }
+ for(n = 0; n < matcher->nb_patterns; n++) {
+ if(strstr(string, matcher->patterns[n]) == 0) return 0;
}
} else {
- if(exclamation_negates) {
- for(n = 0; n < matcher->nb_patterns; n++) {
- if(matcher->patterns[n][0] == '!') {
- if(strcasestr(string, matcher->patterns[n] + 1) != 0) return 0;
- } else {
- if(strcasestr(string, matcher->patterns[n]) == 0) return 0;
- }
- }
- } else {
- for(n = 0; n < matcher->nb_patterns; n++) {
- if(strcasestr(string, matcher->patterns[n]) == 0) return 0;
- }
+ for(n = 0; n < matcher->nb_patterns; n++) {
+ if(strcasestr(string, matcher->patterns[n]) == 0) return 0;
}
}
return 1;
/* Highlight the highlighted line ... */
if(l == new_focus_line) {
- while(k < console_width) {
- buffer[k++] = ' ';
+ if(show_long_lines && k >= console_width) {
+ if(console_width >= 4) {
+ buffer[console_width - 4] = ' ';
+ buffer[console_width - 3] = '.';
+ buffer[console_width - 2] = '.';
+ buffer[console_width - 1] = '.';
+ }
+ } else {
+ while(k < console_width) {
+ buffer[k++] = ' ';
+ }
}
attron(attr_focus_line);
addnstr(buffer, console_width);
attroff(attr_focus_line);
} else {
- buffer[k++] = '\n';
- buffer[k++] = '\0';
+ if(show_long_lines && k >= console_width) {
+ if(console_width >= 4) {
+ buffer[console_width - 4] = ' ';
+ buffer[console_width - 3] = '.';
+ buffer[console_width - 2] = '.';
+ buffer[console_width - 1] = '.';
+ }
+ } else {
+ buffer[k++] = '\n';
+ buffer[k++] = '\0';
+ }
/* clrtoeol(); */
addnstr(buffer, console_width);
}
{ "remove-duplicates", no_argument, 0, 'd' },
{ "regexp", no_argument, 0, 'e' },
{ "case-sensitive", no_argument, 0, 'a' },
+ { "show-long-lines", no_argument, 0, 'j'},
{ "upper-case-makes-case-sensitive", no_argument, 0, 'u' },
{ "title", 1, 0, 't' },
{ "number-of-lines", 1, 0, 'l' },
strcpy(output_filename, "");
- while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeaunt:l:c:-h",
+ while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeajunt:l:c:-h",
long_options, NULL)) != -1) {
switch(c) {
case_sensitive = 1;
break;
- case 'u':
- upper_caps_makes_case_sensitive = 1;
+ case 'j':
+ show_long_lines = 1;
break;
- case 'n':
- exclamation_negates = 1;
+ case 'u':
+ upper_caps_makes_case_sensitive = 1;
break;
case 't':