Try write even if read gets signal, some other tweaks.

This commit is contained in:
Nicholas Marriott 2007-11-07 19:41:17 +00:00
parent 08d9f46aae
commit 35591ecd4e
4 changed files with 13 additions and 15 deletions

View File

@ -186,5 +186,4 @@
(including mutt, emacs). No status bar yet and no key remapping or other (including mutt, emacs). No status bar yet and no key remapping or other
customisation. customisation.
$Id: CHANGES,v 1.57 2007-10-31 14:26:26 nicm Exp $ $Id: CHANGES,v 1.58 2007-11-07 19:41:17 nicm Exp $

1
TODO
View File

@ -55,6 +55,7 @@
rename sessions rename sessions
kill session (not bound by default) kill session (not bound by default)
- fix most(1) problems after scrolling - fix most(1) problems after scrolling
- fix mutt problems with redraw (mutt's) status line when reading mail
- check for some reqd terminfo caps on startup - check for some reqd terminfo caps on startup
-- For 0.2 -------------------------------------------------------------------- -- For 0.2 --------------------------------------------------------------------

View File

@ -1,4 +1,4 @@
/* $Id: buffer-poll.c,v 1.1.1.1 2007-07-09 19:04:12 nicm Exp $ */ /* $Id: buffer-poll.c,v 1.2 2007-11-07 19:41:17 nicm Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -40,18 +40,16 @@ buffer_poll(struct pollfd *pfd, struct buffer *in, struct buffer *out)
if (n == -1) { if (n == -1) {
if (errno != EINTR && errno != EAGAIN) if (errno != EINTR && errno != EAGAIN)
return (-1); return (-1);
return (0); } else
} buffer_add(in, n);
buffer_add(in, n);
} }
if (BUFFER_USED(out) > 0 && pfd->revents & POLLOUT) { if (BUFFER_USED(out) > 0 && pfd->revents & POLLOUT) {
n = write(pfd->fd, BUFFER_OUT(out), BUFFER_USED(out)); n = write(pfd->fd, BUFFER_OUT(out), BUFFER_USED(out));
if (n == -1) { if (n == -1) {
if (errno != EINTR && errno != EAGAIN) if (errno != EINTR && errno != EAGAIN)
return (-1); return (-1);
return (0); } else
} buffer_remove(out, n);
buffer_remove(out, n);
} }
return (0); return (0);
} }

View File

@ -1,4 +1,4 @@
/* $Id: window.c,v 1.25 2007-10-31 14:26:26 nicm Exp $ */ /* $Id: window.c,v 1.26 2007-11-07 19:41:17 nicm Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -45,17 +45,17 @@
* *
* A window has two buffers attached, these are filled and emptied by the main * A window has two buffers attached, these are filled and emptied by the main
* server poll loop. Output data is received from pty's in screen format, * server poll loop. Output data is received from pty's in screen format,
* translated and returned as a series of escape sequences and strings. * translated and returned as a series of escape sequences and strings via
* Input data is received in screen format and written directly to the pty * input_parse (in input.c). Input data is received as key codes and written
* (translation is done in the client). * directly via input_translate_key.
* *
* Each window also has a "virtual" screen (screen.c) which contains the * Each window also has a "virtual" screen (screen.c) which contains the
* current state and is redisplayed when the window is reattached to a client. * current state and is redisplayed when the window is reattached to a client.
* *
* Windows are stored directly on a global array and wrapped in any number of * Windows are stored directly on a global array and wrapped in any number of
* winlink structs to be linked onto local session RB trees A reference count * winlink structs to be linked onto local session RB trees. A reference count
* is maintained and a window removed from the global list and destroyed when * is maintained and a window removed from the global list and destroyed when
* it reaches zero * it reaches zero.
*/ */
/* Global window list. */ /* Global window list. */