Automatic commit
authorFrancois Fleuret <francois@fleuret.org>
Thu, 12 Mar 2009 07:41:40 +0000 (08:41 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Thu, 12 Mar 2009 07:41:40 +0000 (08:41 +0100)
selector.cc

index f15154f..887b4d0 100644 (file)
 #include <fstream>
 #include <string.h>
 #include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 using namespace std;
 
 int buffer_size = 1024;
-int nb_lines_max = 100000;
+int nb_lines_max = 1000;
 char pattern_separator = ';';
+int output_to_vt_buffer = 0;
 
 int match(char *string, int nb_patterns, char **patterns) {
   for(int n = 0; n < nb_patterns; n++) {
@@ -56,7 +60,11 @@ int match(char *string, int nb_patterns, char **patterns) {
 
 void check_opt(int argc, char **argv, int n_opt, int n, const char *help) {
   if(n_opt + n >= argc) {
-    cerr << "Missing argument for " << argv[n_opt] << ". Expecting " << help << "." << endl;
+    cerr << "Missing argument for "
+         << argv[n_opt]
+         << ". Expecting "
+         << help
+         << "." << endl;
     exit(1);
   }
 }
@@ -284,6 +292,11 @@ int main(int argc, char **argv) {
       i += 2;
     }
 
+    else if(strcmp(argv[i], "-v") == 0) {
+      output_to_vt_buffer = 1;
+      i++;
+    }
+
     else if(strcmp(argv[i], "-f") == 0) {
       check_opt(argc, argv, i, 1, "<input filename>");
       strncpy(input_filename, argv[i+1], buffer_size);
@@ -302,7 +315,7 @@ int main(int argc, char **argv) {
     }
 
     else {
-      cerr << argv[0] << " [-h] [-o <output filename>] [-b] [-l <max number of lines>] [-s <pattern separator>]" << endl;
+      cerr << argv[0] << " [-h] [-o <output filename>] [-b] [-l <max number of lines>] [-s <pattern separator>] [-v]" << endl;
       if(strcmp(argv[i], "-h") == 0) {
         exit(0);
       } else {
@@ -387,17 +400,27 @@ int main(int argc, char **argv) {
   curs_set(1);
   endwin();
 
-  ofstream out(output_filename);
-  if(out.fail()) {
-    cerr << "Can not open " << output_filename << " for writing." << endl;
-    exit(1);
-  } else {
+  if(output_to_vt_buffer) {
     if((key == KEY_ENTER || key == '\n') && temporary_line >= 0 && temporary_line < nb_lines) {
-      out << lines[temporary_line] << endl;
+      char *tty = ttyname (STDIN_FILENO);
+      int fd = open(tty, O_WRONLY);
+      write(fd, lines[temporary_line], strlen(lines[temporary_line]));
+      close(fd);
+    }
+  } else {
+
+    ofstream out(output_filename);
+    if(out.fail()) {
+      cerr << "Can not open " << output_filename << " for writing." << endl;
+      exit(1);
     } else {
-      out << endl;
+      if((key == KEY_ENTER || key == '\n') && temporary_line >= 0 && temporary_line < nb_lines) {
+        out << lines[temporary_line] << endl;
+      } else {
+        out << endl;
+      }
+      out.flush();
     }
-    out.flush();
   }
 
   for(int l = 0; l < nb_lines; l++) {