From 438144692dba1aabd34d3253be61b461f15e5e6d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 27 Aug 2007 15:28:07 +0000 Subject: [PATCH] Flush even detached sessions. --- NOTES | 6 ++++-- TODO | 1 + server.c | 28 +++++++++++++--------------- session.c | 4 ++-- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/NOTES b/NOTES index 20064ee5..ffdc6dcb 100644 --- a/NOTES +++ b/NOTES @@ -27,6 +27,8 @@ Attach to a previous session with: tmux -n attach +A name must (currently) be specified when attaching. This may change. + List all sessions with: tmux list @@ -37,8 +39,8 @@ Or the windows of a single session with: Sessions are destroyed when no windows remain attached to them. -Another server process can be used by specifying an alternative socket path with -"-s " but it shouldn't normally be required. +Another server process can be used by specifying an alternative socket path +with "-s " but it shouldn't normally be required. You can set the window title (listed in -l), using the \e] escape sequence. For example: diff --git a/TODO b/TODO index 7d2108b0..685479d6 100644 --- a/TODO +++ b/TODO @@ -12,3 +12,4 @@ - wrap windows with forward/back - new window command prompt - mouse handling and some other bits elinks needs +- scrollback diff --git a/server.c b/server.c index c24fb956..411f9f13 100644 --- a/server.c +++ b/server.c @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.6 2007-08-27 13:45:26 nicm Exp $ */ +/* $Id: server.c,v 1.7 2007-08-27 15:28:07 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -658,31 +658,29 @@ lost_window(struct window *w) struct client *c; struct session *s; u_int i, j; + int destroyed; - for (i = 0; i < ARRAY_LENGTH(&clients); i++) { - c = ARRAY_ITEM(&clients, i); - if (c == NULL || c->session == NULL) + for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { + s = ARRAY_ITEM(&sessions, i); + if (s == NULL) continue; - if (!session_has(c->session, w)) + if (!session_has(s, w)) continue; - s = c->session; /* Detach window from session. */ session_detach(s, w); - /* Try to flush session and redraw if not destroyed. */ - if (session_flush(s) == 0) { - changed_window(c); - continue; - } - - /* Kill all clients attached to this session. */ + /* Try to flush session and either redraw or kill clients. */ + destroyed = session_flush(s); for (j = 0; j < ARRAY_LENGTH(&clients); j++) { c = ARRAY_ITEM(&clients, j); if (c == NULL || c->session != s) continue; - c->session = NULL; - write_client(c, MSG_EXIT, NULL, 0); + if (destroyed) { + c->session = NULL; + write_client(c, MSG_EXIT, NULL, 0); + } else + changed_window(c); } } } diff --git a/session.c b/session.c index cb0e90e1..d3667c6b 100644 --- a/session.c +++ b/session.c @@ -1,4 +1,4 @@ -/* $Id: session.c,v 1.5 2007-08-27 13:45:26 nicm Exp $ */ +/* $Id: session.c,v 1.6 2007-08-27 15:28:07 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -70,7 +70,7 @@ session_create(const char *name, const char *cmd, u_int sx, u_int sy) if (*name != '\0') strlcpy(s->name, name, sizeof s->name); else - xsnprintf(s->name, sizeof s->name, "session-%u", i); + xsnprintf(s->name, sizeof s->name, "%u", i); return (s); }