X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=selector.cc;h=ae945fd07e48c54acfb55184aa878f52bdb493da;hb=9de58bd4aa7acce6ab64ee5095cae71ed8e00cf9;hp=4347e51a25dca628bf5653adde475125431ae4eb;hpb=12892379844ef251d395dc5344087a3cc56ba406;p=selector.git diff --git a/selector.cc b/selector.cc index 4347e51..ae945fd 100644 --- a/selector.cc +++ b/selector.cc @@ -43,14 +43,16 @@ using namespace std; #define VERSION "1.0" +const int buffer_size = 1024; + // Yeah, global variables! -int buffer_size = 1024; int nb_lines_max = 10000; char pattern_separator = ';'; int output_to_vt_buffer = 0; int with_colors = 1; int zsh_history = 0; +int inverse_order = 0; ////////////////////////////////////////////////////////////////////// @@ -347,8 +349,9 @@ int main(int argc, char **argv) { setlocale(LC_ALL, ""); char input_filename[buffer_size], output_filename[buffer_size]; + strcpy(input_filename, ""); - strcpy(output_filename, "/tmp/selector.out"); + strcpy(output_filename, ""); int i = 1; while(i < argc) { @@ -385,6 +388,11 @@ int main(int argc, char **argv) { i++; } + else if(strcmp(argv[i], "-i") == 0) { + inverse_order = 1; + i++; + } + else if(strcmp(argv[i], "-z") == 0) { zsh_history = 1; i++; @@ -415,6 +423,7 @@ int main(int argc, char **argv) { << " [-v]" << " [-m]" << " [-z]" + << " [-i]" << " [-c ]" << " [-o ]" << " [-s ]" @@ -444,15 +453,24 @@ int main(int argc, char **argv) { int nb_lines = 0; while(nb_lines < nb_lines_max && !file.eof()) { file.getline(buffer, buffer_size); - char *s = buffer; - if(zsh_history && *s == ':') { - s++; - while(*s && *s != ':') s++; - if(*s == ':') s++; - } - lines[nb_lines] = new char[strlen(s) + 1]; - strcpy(lines[nb_lines], s); - nb_lines++; + if(strcmp(buffer, "") != 0) { + char *s = buffer; + if(zsh_history && *s == ':') { + while(*s && *s != ';') s++; + if(*s == ';') s++; + } + lines[nb_lines] = new char[strlen(s) + 1]; + strcpy(lines[nb_lines], s); + nb_lines++; + } + } + + if(inverse_order) { + for(int i = 0; i < nb_lines/2; i++) { + char *s = lines[nb_lines - 1 - i]; + lines[nb_lines - 1 - i] = lines[i]; + lines[i] = s; + } } char patterns[buffer_size]; @@ -547,7 +565,9 @@ int main(int argc, char **argv) { if(temporary_line >= 0 && temporary_line < nb_lines) { inject_into_tty_buffer(lines[temporary_line]); } - } else { + } + + if(output_filename[0]) { ofstream out(output_filename); if(out.fail()) { cerr << "Can not open " << output_filename << " for writing." << endl;