X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=selector.cc;h=0878f8252cbfce7af72a85055c18ccb49472a8fb;hb=6d645205fcd54e4b61d1bf62a09aebee0a01dec9;hp=7d59b2fe1708d4f3c801e4719d85bab13f5a9e0c;hpb=46c00136c5a8684c50f0a518f53fa8af85d18d92;p=selector.git diff --git a/selector.cc b/selector.cc index 7d59b2f..0878f82 100644 --- a/selector.cc +++ b/selector.cc @@ -31,7 +31,7 @@ using namespace std; const int buffer_size = 1024; const int nb_lines_max = 100000; -void refresh_screen(int *screen_line, int *line, int nb_lines, char **lines, char *regexp, int noblink) { +int refresh_screen(int *screen_line, int *line, int nb_lines, char **lines, char *regexp, int noblink) { char buffer[buffer_size]; int maxx = getmaxx(stdscr); @@ -47,6 +47,7 @@ void refresh_screen(int *screen_line, int *line, int nb_lines, char **lines, cha int nb_printed_lines = 1, last_printer_line = -1; int y = 0; + int current_line = -1; while(nb_printed_lines < maxy && y < nb_lines) { if(strstr(lines[y], regexp) && @@ -70,6 +71,7 @@ void refresh_screen(int *screen_line, int *line, int nb_lines, char **lines, cha attron(COLOR_PAIR(2)); printw(buffer); attroff(COLOR_PAIR(2)); + current_line = y; } else { printw(buffer); } @@ -103,6 +105,8 @@ void refresh_screen(int *screen_line, int *line, int nb_lines, char **lines, cha attroff(COLOR_PAIR(1)); refresh(); // After doing something on the display, we refresh it + + return current_line; } int main(int argc, char **argv) { @@ -159,6 +163,8 @@ int main(int argc, char **argv) { refresh_screen(&screen_line, &line, nb_lines, lines, regexp, noblink); + int current_line = -1; + do { key = getch(); @@ -185,17 +191,20 @@ int main(int argc, char **argv) { line++; } - refresh_screen(&screen_line, &line, nb_lines, lines, regexp, noblink); + current_line = refresh_screen(&screen_line, &line, nb_lines, lines, regexp, noblink); } while(key != '\n' && key != KEY_ENTER && key != ''); echo(); curs_set(1); endwin(); + ofstream out("/tmp/selector.out"); + out << lines[current_line] << endl; + out.flush(); + for(int l = 0; l < nb_lines; l++) { delete[] lines[l]; } return 0; } -