diff options
author | Tiago Cunha <tcunha@gmx.com> | 2010-10-09 14:29:32 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2010-10-09 14:29:32 +0000 |
commit | b5349ab5d94569e63b8446352f243e0cd9617030 (patch) | |
tree | 2604a50fe78880e09fc1422fad183d80912adc3d | |
parent | 7874b00d4c207dc82d075d64631aa87f22771af9 (diff) |
Sync OpenBSD patchset 766:
Two new options:
- server option "exit-unattached" makes the server exit when no clients
are attached, even if sessions are present;
- session option "destroy-unattached" destroys a session once no clients
are attached to it.
These are useful for preventing tmux remaining in the background where
it is undesirable and when using tmux as a login shell to keep a limit
on new sessions.
-rw-r--r-- | cmd-set-option.c | 4 | ||||
-rw-r--r-- | cmd-switch-client.c | 3 | ||||
-rw-r--r-- | server-client.c | 3 | ||||
-rw-r--r-- | server-fn.c | 21 | ||||
-rw-r--r-- | server.c | 12 | ||||
-rw-r--r-- | tmux.1 | 10 | ||||
-rw-r--r-- | tmux.c | 4 | ||||
-rw-r--r-- | tmux.h | 3 |
8 files changed, 47 insertions, 13 deletions
diff --git a/cmd-set-option.c b/cmd-set-option.c index ebf6c8a8..25000165 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-option.c,v 1.99 2010-09-07 13:20:28 tcunha Exp $ */ +/* $Id: cmd-set-option.c,v 1.100 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -75,6 +75,7 @@ const char *set_option_bell_action_list[] = { const struct set_option_entry set_option_table[] = { { "escape-time", SET_OPTION_NUMBER, 0, INT_MAX, NULL }, + { "exit-unattached", SET_OPTION_FLAG, 0, 0, NULL }, { "quiet", SET_OPTION_FLAG, 0, 0, NULL }, { NULL, 0, 0, 0, NULL } }; @@ -87,6 +88,7 @@ const struct set_option_entry set_session_option_table[] = { { "default-path", SET_OPTION_STRING, 0, 0, NULL }, { "default-shell", SET_OPTION_STRING, 0, 0, NULL }, { "default-terminal", SET_OPTION_STRING, 0, 0, NULL }, + { "destroy-unattached", SET_OPTION_FLAG, 0, 0, NULL }, { "detach-on-destroy", SET_OPTION_FLAG, 0, 0, NULL }, { "display-panes-colour", SET_OPTION_COLOUR, 0, 0, NULL }, { "display-panes-active-colour", SET_OPTION_COLOUR, 0, 0, NULL }, diff --git a/cmd-switch-client.c b/cmd-switch-client.c index ac1eef62..3fb8fc87 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-switch-client.c,v 1.20 2010-09-10 13:36:17 tcunha Exp $ */ +/* $Id: cmd-switch-client.c,v 1.21 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -152,6 +152,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx) c->session = s; recalculate_sizes(); + server_check_unattached(); server_redraw_client(c); return (0); diff --git a/server-client.c b/server-client.c index 91bb9b9d..27367972 100644 --- a/server-client.c +++ b/server-client.c @@ -1,4 +1,4 @@ -/* $Id: server-client.c,v 1.41 2010-09-07 13:19:53 tcunha Exp $ */ +/* $Id: server-client.c,v 1.42 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -184,6 +184,7 @@ server_client_lost(struct client *c) c->flags |= CLIENT_DEAD; recalculate_sizes(); + server_check_unattached(); server_update_socket(); } diff --git a/server-fn.c b/server-fn.c index 5865c332..ffdaa934 100644 --- a/server-fn.c +++ b/server-fn.c @@ -1,4 +1,4 @@ -/* $Id: server-fn.c,v 1.110 2010-08-11 22:16:43 tcunha Exp $ */ +/* $Id: server-fn.c,v 1.111 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -405,6 +405,25 @@ server_destroy_session(struct session *s) } void +server_check_unattached (void) +{ + struct session *s; + u_int i; + + /* + * If any sessions are no longer attached and have destroy-unattached + * set, collect them. + */ + for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { + s = ARRAY_ITEM(&sessions, i); + if (s == NULL || !(s->flags & SESSION_UNATTACHED)) + continue; + if (options_get_number (&s->options, "destroy-unattached")) + session_destroy(s); + } +} + +void server_set_identify(struct client *c) { struct timeval tv; @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.244 2010-10-09 14:26:29 tcunha Exp $ */ +/* $Id: server.c,v 1.245 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -226,15 +226,17 @@ server_loop(void) } } -/* Check if the server should be shutting down (no more clients or windows). */ +/* Check if the server should be shutting down (no more clients or sessions). */ int server_should_shutdown(void) { u_int i; - for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { - if (ARRAY_ITEM(&sessions, i) != NULL) - return (0); + if (!options_get_number(&global_options, "exit-unattached")) { + for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { + if (ARRAY_ITEM(&sessions, i) != NULL) + return (0); + } } for (i = 0; i < ARRAY_LENGTH(&clients); i++) { if (ARRAY_ITEM(&clients, i) != NULL) @@ -1,4 +1,4 @@ -.\" $Id: tmux.1,v 1.266 2010-10-09 14:25:40 tcunha Exp $ +.\" $Id: tmux.1,v 1.267 2010-10-09 14:29:32 tcunha Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: September 25 2010 $ +.Dd $Mdocdate: September 26 2010 $ .Dt TMUX 1 .Os .Sh NAME @@ -1587,6 +1587,9 @@ Set the time in milliseconds for which waits after an escape is input to determine if it is part of a function or meta key sequences. The default is 500 milliseconds. +.It Ic exit-unattached +If enabled, the server will exit when there are no attached clients, rather +than when there are no attached sessions. .It Ic quiet Enable or disable the display of various informational messages (see also the .Fl q @@ -1659,6 +1662,9 @@ to work correctly, this be set to .Ql screen or a derivative of it. +.It Ic destroy-unattached +If enabled and the session is no longer attached to any clients, it is +destroyed. .It Ic detach-on-destroy If on (the default), the client is detached when the session it is attached to is destroyed. @@ -1,4 +1,4 @@ -/* $Id: tmux.c,v 1.215 2010-08-29 14:42:11 tcunha Exp $ */ +/* $Id: tmux.c,v 1.216 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -334,6 +334,7 @@ main(int argc, char **argv) oo = &global_options; options_set_number(oo, "quiet", quiet); options_set_number(oo, "escape-time", 500); + options_set_number(oo, "exit-unattached", 0); options_init(&global_s_options, NULL); so = &global_s_options; @@ -344,6 +345,7 @@ main(int argc, char **argv) options_set_string(so, "default-path", "%s", ""); options_set_string(so, "default-shell", "%s", getshell()); options_set_string(so, "default-terminal", "screen"); + options_set_number(so, "destroy-unattached", 0); options_set_number(so, "detach-on-destroy", 1); options_set_number(so, "display-panes-active-colour", 1); options_set_number(so, "display-panes-colour", 4); @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.577 2010-09-18 15:43:53 tcunha Exp $ */ +/* $Id: tmux.h,v 1.578 2010-10-09 14:29:32 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1659,6 +1659,7 @@ void server_unlink_window(struct session *, struct winlink *); void server_destroy_pane(struct window_pane *); void server_destroy_session_group(struct session *); void server_destroy_session(struct session *); +void server_check_unattached (void); void server_set_identify(struct client *); void server_clear_identify(struct client *); void server_update_event(struct client *); |