Automatic commit
[selector.git] / selector.cc
index eb44a61..c63a1d3 100644 (file)
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <termios.h>
+#include <strings.h>
 
 using namespace std;
 
@@ -427,8 +431,30 @@ int main(int argc, char **argv) {
     if((key == KEY_ENTER || key == '\n') && temporary_line >= 0 && temporary_line < nb_lines) {
       char *tty = ttyname (STDIN_FILENO);
       int fd = open(tty, O_WRONLY);
-      write(fd, lines[temporary_line], strlen(lines[temporary_line]));
-      close(fd);
+
+      struct termios oldtio, newtio;
+
+      if (fd >= 0) {
+        // Save current port settings
+        tcgetattr(fd,&oldtio);
+        bzero(&newtio, sizeof(newtio));
+        newtio.c_cflag = 0;
+        newtio.c_iflag = 0;
+        newtio.c_oflag = 0;
+        // Set input mode (non-canonical, *no echo*,...)
+        newtio.c_lflag = 0;
+        tcflush(fd, TCIFLUSH);
+        tcsetattr(fd,TCSANOW, &newtio);
+        for(char *k = lines[temporary_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);
+      }
     }
   } else {