summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2012-05-20 17:14:10 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2012-05-20 17:22:13 +0200
commit47c52ae7bbfec87a80fb583fb0753b4d77b0ba1d (patch)
tree9d8e512783b60899296d5240321f40ba46b9af24
parent6c11b8985cbd8fbb5525a4c4d2338603b81729c5 (diff)
downloadcalcurse-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.c10
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);
}
/*