fix: broken statusbar after key-handler cancellation
to reproduce:
1. have an image-info script
2. invoke the key-handler
3. cancle invocation by pressing `escape`
at this point, the statusbar ends up being empty.
the regression seems to be caused by 6922d5d
(changing select to poll),
unsure why that is.
in any case, this simplifies read_info quite a bit and solves the
regression as well. in short:
* read straight into the statusbar buffer
* if read succeeds, make sure buffer is null terminated and replace any
newline with space
* close the script
This commit is contained in:
parent
f255e1cc12
commit
b4268fbf38
31
main.c
31
main.c
|
@ -73,7 +73,6 @@ static bool resized = false;
|
||||||
static struct {
|
static struct {
|
||||||
extcmd_t f, ft;
|
extcmd_t f, ft;
|
||||||
int fd;
|
int fd;
|
||||||
unsigned int i, lastsep;
|
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
} info;
|
} info;
|
||||||
|
|
||||||
|
@ -296,7 +295,6 @@ void open_info(void)
|
||||||
if (pfd.readfd >= 0) {
|
if (pfd.readfd >= 0) {
|
||||||
fcntl(pfd.readfd, F_SETFL, O_NONBLOCK);
|
fcntl(pfd.readfd, F_SETFL, O_NONBLOCK);
|
||||||
info.fd = pfd.readfd;
|
info.fd = pfd.readfd;
|
||||||
info.i = info.lastsep = 0;
|
|
||||||
info.pid = pfd.pid;
|
info.pid = pfd.pid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,32 +302,15 @@ void open_info(void)
|
||||||
static void read_info(void)
|
static void read_info(void)
|
||||||
{
|
{
|
||||||
ssize_t i, n;
|
ssize_t i, n;
|
||||||
char buf[BAR_L_LEN];
|
|
||||||
|
|
||||||
while (true) {
|
if ((n = read(info.fd, win.bar.l.buf, win.bar.l.size - 1)) > 0) {
|
||||||
n = read(info.fd, buf, sizeof(buf));
|
win.bar.l.buf[n] = '\0';
|
||||||
if (n < 0 && errno == EAGAIN)
|
for (i = 0; i < n; ++i) {
|
||||||
return;
|
if (win.bar.l.buf[i] == '\n')
|
||||||
else if (n == 0)
|
win.bar.l.buf[i] = ' ';
|
||||||
goto end;
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
if (buf[i] == '\n') {
|
|
||||||
if (info.lastsep == 0) {
|
|
||||||
win.bar.l.buf[info.i++] = ' ';
|
|
||||||
info.lastsep = 1;
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
win.bar.l.buf[info.i++] = buf[i];
|
|
||||||
info.lastsep = 0;
|
|
||||||
}
|
|
||||||
if (info.i + 1 == win.bar.l.size)
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end:
|
|
||||||
info.i -= info.lastsep;
|
|
||||||
win.bar.l.buf[info.i] = '\0';
|
|
||||||
win_draw(&win);
|
win_draw(&win);
|
||||||
|
}
|
||||||
close_info();
|
close_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue