Start counting nb_printed_lines from 0
[selector.git] / selector.cc
index 2a6a4f3..f4d7930 100644 (file)
@@ -58,32 +58,37 @@ int remove_duplicates = 0;
 
 //////////////////////////////////////////////////////////////////////
 
+// int test_and_set_hash(char *s, char **hashed, int hash_size) {
+  // uint32_t code = 0, mask;
+  // int result;
+
+  // for(int k = 0; s[k]; k++) {
+    // code += ((uint32_t) (s[k])) << (8 * k%4);
+  // }
+
+  // code = code%hash_table_size;
+
+  // if(hashed[code]) {
+  // } else {
+  // }
+// }
+
+//////////////////////////////////////////////////////////////////////
+
 // This looks severely Linux-only ...
 
 void inject_into_tty_buffer(char *line) {
-  char *tty = ttyname(STDIN_FILENO);
-  int fd = open(tty, O_RDWR);
-
   struct termios oldtio, newtio;
-
-  if (fd >= 0) {
-    // Save current port settings
-    tcgetattr(fd,&oldtio);
-    memset(&newtio, 0, sizeof(newtio));
-    // Set input mode (non-canonical, *no echo*,...)
-    tcflush(fd, TCIFLUSH);
-    tcsetattr(fd,TCSANOW, &newtio);
-    // Put the selected line in the tty input buffer
-    for(char *k = line; *k; k++) {
-      ioctl(fd, TIOCSTI, k);
-    }
-    // Restore the old settings
-    tcsetattr(fd,TCSANOW, &oldtio);
-    close(fd);
-  } else {
-    cerr << "Can not open " << tty << "." << endl;
-    exit(1);
+  tcgetattr(STDIN_FILENO,&oldtio);
+  memset(&newtio, 0, sizeof(newtio));
+  // Set input mode (non-canonical, *no echo*,...)
+  tcsetattr(STDIN_FILENO,TCSANOW, &newtio);
+  // Put the selected line in the tty input buffer
+  for(char *k = line; *k; k++) {
+    ioctl(STDIN_FILENO, TIOCSTI, k);
   }
+  // Restore the old settings
+  tcsetattr(STDIN_FILENO,TCSANOW, &oldtio);
 }
 
 //////////////////////////////////////////////////////////////////////
@@ -203,7 +208,7 @@ void update_screen(int *current_line, int *temporary_line, int motion,
 
   addstr("\n");
 
-  int nb_printed_lines = 1;
+  int nb_printed_lines = 0;
 
   // Here new_line is either a line number matching the patterns, or -1
 
@@ -288,15 +293,14 @@ void update_screen(int *current_line, int *temporary_line, int motion,
 
   *temporary_line = new_line;
 
-  if(nb_printed_lines == 1) {
+  if(nb_printed_lines == 0) {
     addnstr("[no selection]\n", console_width);
-    nb_printed_lines++;
   }
 
   // Draw the modeline
 
   sprintf(buffer, "%d/%d pattern: %s",
-          nb_printed_lines - 1,
+          nb_printed_lines,
           nb_lines,
           pattern_list);
 
@@ -522,7 +526,7 @@ int main(int argc, char **argv) {
       patterns[patterns_point] = '\0';
     }
 
-    else if(key == KEY_BACKSPACE || key == '\b' ||
+    else if(key == KEY_BACKSPACE || key == '\b' || key == '\7f' ||
             key == KEY_DC || key == '\ 4') {
       if(patterns_point > 0) {
         patterns_point--;