From 1165d81998339307f7a8cbf41d3f9d22b45d8409 Mon Sep 17 00:00:00 2001 From: karlstav Date: Sun, 28 Jun 2020 21:49:14 +0200 Subject: [PATCH] #364 added key controls for noncurses mode --- cava.c | 26 +++++++++++++++----------- output/terminal_noncurses.c | 4 ++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/cava.c b/cava.c index 45ec0c3..62859bf 100644 --- a/cava.c +++ b/cava.c @@ -243,6 +243,7 @@ int main(int argc, char **argv) { double eq[256]; float g; struct timespec req = {.tv_sec = 0, .tv_nsec = 0}; + struct timespec sleep_mode_timer = {.tv_sec = 0, .tv_nsec = 0}; char configPath[PATH_MAX]; char *usage = "\n\ Usage : " PACKAGE " [options]\n\ @@ -746,6 +747,14 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co number_of_bars = number_of_bars * 2; bool resizeTerminal = false; + fcntl(0, F_SETFL, O_NONBLOCK); + + if (p.framerate <= 1) { + req.tv_sec = 1 / (float)p.framerate; + } else { + req.tv_sec = 0; + req.tv_nsec = (1 / (float)p.framerate) * 1e9; + } while (!resizeTerminal) { @@ -754,6 +763,8 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co if (output_mode == OUTPUT_NCURSES) ch = getch(); #endif + if (output_mode == OUTPUT_NONCURSES) + ch = fgetc(stdin); switch (ch) { case 65: // key up @@ -880,9 +891,9 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co printw("no sound detected for 5 sec, going to sleep mode\n"); #endif // wait 0.1 sec, then check sound again. - req.tv_sec = 0; - req.tv_nsec = 100000000; - nanosleep(&req, NULL); + sleep_mode_timer.tv_sec = 0; + sleep_mode_timer.tv_nsec = 100000000; + nanosleep(&sleep_mode_timer, NULL); continue; } @@ -1015,14 +1026,6 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co resizeTerminal = true; #endif - if (p.framerate <= 1) { - req.tv_sec = 1 / (float)p.framerate; - } else { - req.tv_sec = 0; - req.tv_nsec = (1 / (float)p.framerate) * 1000000000; - } - - nanosleep(&req, NULL); memcpy(previous_frame, bars, 256 * sizeof(int)); @@ -1033,6 +1036,7 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co exit(EXIT_FAILURE); } + nanosleep(&req, NULL); } // resize terminal } // reloading config diff --git a/output/terminal_noncurses.c b/output/terminal_noncurses.c index 6789f30..27cdc50 100644 --- a/output/terminal_noncurses.c +++ b/output/terminal_noncurses.c @@ -25,9 +25,9 @@ int setecho(int fd, int onoff) { return -1; if (onoff == 0) - t.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); + t.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON); else - t.c_lflag |= (ECHO | ECHOE | ECHOK | ECHONL); + t.c_lflag |= (ECHO | ECHOE | ECHOK | ECHONL | ICANON); if (tcsetattr(fd, TCSANOW, &t) == -1) return -1;