const int buffer_size = 1024;
const int nb_lines_max = 100000;
-void build_display(int *screen_line, int *line, int nb_lines, char **lines, char *regexp) {
+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);
int maxy = min(buffer_size-2, getmaxy(stdscr));
- // clear(); // Cleaning the window
+ if(!noblink) {
+ clear();
+ }
use_default_colors();
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) &&
k++;
}
- while(k < maxx - 1) {
- buffer[k++] = ' ';
+ if(noblink) {
+ while(k < maxx - 1) {
+ buffer[k++] = ' ';
+ }
}
buffer[k++] = '\n';
buffer[k++] = '\0';
attron(COLOR_PAIR(2));
printw(buffer);
attroff(COLOR_PAIR(2));
+ current_line = y;
} else {
printw(buffer);
}
y++;
}
- { // Erase the rest of the window. That's slightly ugly.
+ if(noblink) { // Erase the rest of the window. That's slightly ugly.
int k = 0;
while(k < maxx - 1) {
buffer[k++] = ' ';
attroff(COLOR_PAIR(1));
refresh(); // After doing something on the display, we refresh it
+
+ return current_line;
}
int main(int argc, char **argv) {
char buffer[buffer_size];
char *lines[nb_lines_max];
+ int noblink = 1;
char *file_name;
char stdin_name[] = "/dev/stdin";
int line = 0, screen_line = 0;
- build_display(&screen_line, &line, nb_lines, lines, regexp);
+ refresh_screen(&screen_line, &line, nb_lines, lines, regexp, noblink);
+
+ int current_line = -1;
do {
line++;
}
- build_display(&screen_line, &line, nb_lines, lines, regexp);
+ current_line = refresh_screen(&screen_line, &line, nb_lines, lines, regexp, noblink);
} while(key != '\n' && key != KEY_ENTER && key != '\a');
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];
}