diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2012-05-20 17:14:10 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2012-05-20 17:22:13 +0200 |
commit | 47c52ae7bbfec87a80fb583fb0753b4d77b0ba1d (patch) | |
tree | 9d8e512783b60899296d5240321f40ba46b9af24 | |
parent | 6c11b8985cbd8fbb5525a4c4d2338603b81729c5 (diff) | |
download | calcurse-47c52ae7bbfec87a80fb583fb0753b4d77b0ba1d.zip |
src/utils.c: Disable canonical mode in press_any_key()
Use tcsetattr() to disable canonical mode in press_any_key() before
waiting for a key press. This makes sure that input is available
immediately (instead of line by line). Also, disable echoing until a key
is pressed.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r-- | src/utils.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/utils.c b/src/utils.c index 36abb30..a77bbb6 100644 --- a/src/utils.c +++ b/src/utils.c @@ -44,6 +44,7 @@ #include <errno.h> #include <fcntl.h> #include <sys/wait.h> +#include <termios.h> #include "calcurse.h" @@ -1077,12 +1078,21 @@ child_wait (int *pfdin, int *pfdout, int pid) void press_any_key (void) { + struct termios t_attr_old, t_attr; + + tcgetattr (STDIN_FILENO, &t_attr_old); + memcpy (&t_attr, &t_attr_old, sizeof (struct termios)); + t_attr.c_lflag &= ~(ICANON | ECHO | ECHONL); + tcsetattr (STDIN_FILENO, TCSAFLUSH, &t_attr); + fflush (stdout); fputs (_("Press any key to continue..."), stdout); fflush (stdout); fgetc (stdin); fflush (stdin); fputs ("\r\n", stdout); + + tcsetattr (STDIN_FILENO, TCSAFLUSH, &t_attr_old); } /* |