X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=selector.cc;h=e119fc6db121bd36f3c9a44812b753c7be7e1f4a;hb=7b78746dc81a4654942ae17a4604d7443fbde929;hp=0062a3b35caf0aaec20e2e9c9df07f8fde32ac9b;hpb=2d1696c3f298576c111fb085bab6f930d017f46e;p=selector.git diff --git a/selector.cc b/selector.cc index 0062a3b..e119fc6 100644 --- a/selector.cc +++ b/selector.cc @@ -48,12 +48,13 @@ const int buffer_size = 1024; // Yeah, global variables! -int nb_lines_max = 10000; +int nb_lines_max = 1000; char pattern_separator = ';'; int output_to_vt_buffer = 0; int with_colors = 1; int zsh_history = 0, bash_history = 0; int inverse_order = 0; +int remove_duplicates = 0; ////////////////////////////////////////////////////////////////////// @@ -322,7 +323,6 @@ void update_screen(int *current_line, int *temporary_line, int motion, int main(int argc, char **argv) { char buffer[buffer_size]; - char *lines[nb_lines_max]; int color_fg_modeline, color_bg_modeline; int color_fg_highlight, color_bg_highlight; @@ -384,6 +384,11 @@ int main(int argc, char **argv) { i++; } + else if(strcmp(argv[i], "-r") == 0) { + remove_duplicates = 1; + i++; + } + else if(strcmp(argv[i], "-l") == 0) { check_opt(argc, argv, i, 1, ""); nb_lines_max = atoi(argv[i+1]); @@ -408,6 +413,7 @@ int main(int argc, char **argv) { << " [-h]" << " [-v]" << " [-m]" + << " [-r]" << " [-z]" << " [-i]" << " [-c ]" @@ -424,6 +430,8 @@ int main(int argc, char **argv) { } } + char **lines = new char *[nb_lines_max]; + if(!input_filename[0]) { cerr << "You must specify a input file with -f." << endl; exit(1); @@ -451,9 +459,33 @@ int main(int argc, char **argv) { while(*s == ' ' || (*s >= '0' && *s <= '9')) s++; } - lines[nb_lines] = new char[strlen(s) + 1]; - strcpy(lines[nb_lines], s); - nb_lines++; + /* + + // This is supposed to remove any duplicates, not only + // successive ones. However, it is O(N^2), we should use + // hash-codes + + int keep = 1; + + if(remove_duplicates) { + for(int k = 0; keep && k < nb_lines; k++) { + keep &= strcmp(lines[k], s); + } + } + + if(keep) { + lines[nb_lines] = new char[strlen(s) + 1]; + strcpy(lines[nb_lines], s); + nb_lines++; + } + + */ + + if(!remove_duplicates || nb_lines == 0 || strcmp(lines[nb_lines - 1], s)) { + lines[nb_lines] = new char[strlen(s) + 1]; + strcpy(lines[nb_lines], s); + nb_lines++; + } } } @@ -581,6 +613,7 @@ int main(int argc, char **argv) { for(int l = 0; l < nb_lines; l++) { delete[] lines[l]; } + delete[] lines; exit(0); }