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>
This commit is contained in:
Lukas Fleischer 2012-05-20 17:14:10 +02:00
parent 6c11b8985c
commit 47c52ae7bb

View File

@ -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);
}
/*