canoncial mode fixes
[my-code/ivac.git] / src / input.c
index 1403017..30f60b9 100644 (file)
@@ -18,11 +18,14 @@ int input_init(t_input *input) {
   }
   input->c_count=0;
 
+  tcgetattr(0,&(input->tios));
+  tios=input->tios;
+
   if(!(input->mode&LINE_BUFFERED)) {
-    tcgetattr(0,&tios);
-    /* switch off canonical mode */
     tios.c_lflag&=(~ICANON);
     tios.c_lflag&=(~ECHO);
+    tios.c_cc[VTIME]=0;
+    tios.c_cc[VMIN]=1;
     tcsetattr(0,TCSANOW,&tios);
   }
 
@@ -31,15 +34,8 @@ int input_init(t_input *input) {
 
 int input_shutdown(t_input *input) {
 
-  struct termios tios;
-
   free(input->content);
-
-  tcgetattr(0,&tios);
-  tios.c_lflag|=ICANON;
-  tios.c_lflag|=ECHO;
-  tcsetattr(0,TCSANOW,&tios);
-
+  tcsetattr(0,TCSANOW,&(input->tios));
   puts("[input] shutdown");
 
   return I_SUCCESS;