Consume all the lines before parsing
Read input lines in non-blockin mode and parse the last one. Should fix https://github.com/LemonBoy/bar/issues/107
This commit is contained in:
parent
d680ea4256
commit
309047f205
10
lemonbar.c
10
lemonbar.c
|
@ -7,6 +7,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -1344,6 +1345,9 @@ main (int argc, char **argv)
|
||||||
// Get the fd to Xserver
|
// Get the fd to Xserver
|
||||||
pollin[1].fd = xcb_get_file_descriptor(c);
|
pollin[1].fd = xcb_get_file_descriptor(c);
|
||||||
|
|
||||||
|
// Prevent fgets to block
|
||||||
|
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
bool redraw = false;
|
bool redraw = false;
|
||||||
|
|
||||||
|
@ -1357,9 +1361,9 @@ main (int argc, char **argv)
|
||||||
else break; // ...bail out
|
else break; // ...bail out
|
||||||
}
|
}
|
||||||
if (pollin[0].revents & POLLIN) { // New input, process it
|
if (pollin[0].revents & POLLIN) { // New input, process it
|
||||||
if (fgets(input, sizeof(input), stdin) == NULL)
|
input[0] = '\0';
|
||||||
break; // EOF received
|
while (fgets(input, sizeof(input), stdin) != NULL)
|
||||||
|
; // Drain the buffer, the last line is actually used
|
||||||
parse(input);
|
parse(input);
|
||||||
redraw = true;
|
redraw = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user