Ha!

Yes, that's exactly what you can do. Sorry about that.

On Tue, Apr 16, 2013 at 11:58 PM, Nicholas Marriott
<nicholas.marri...@gmail.com> wrote:
> Grouped sessions don't share options so can't you just set
> destroy-unattached for the transient sessions?
>
>
> On Tue, Apr 16, 2013 at 09:56:20PM -0700, Daniel Ralston wrote:
>> Hi all,
>>
>> If I've done my job well, the commit message should be descriptive
>> enough. Let me know if you'd like me to make any tweaks.
>>
>> Have a good week!
>>     Daniel
>>
>>
>> ----
>> >From 1e5676ea9420359e7de4ee49339a7d089fab7839 Mon Sep 17 00:00:00 2001
>> From: Daniel Ralston <wubbul...@gmail.com>
>> Date: Tue, 16 Apr 2013 20:09:17 -0700
>> Subject: [PATCH] Add -T (make session "transient") option to new-session
>>
>> Transient sessions will be killed when no clients are attached to them.
>>
>> * Rationale:
>>
>> When switching to tmux, many people miss screen's ability to have
>> multiple clients attached to a single session, without every client
>> having to share the same view.
>>
>> tmux can approximate this behaviour by grouping clients' sessions using
>> the -t option for new-session. But, each session that the user doesn't
>> want anymore must be explicitly killed when its client is detached, or
>> else the detached sessions will pile up in the background, unused. (One
>> distasteful alternative is to use some sort of byzantine
>> session-managing shell script.)
>>
>> The -T option solves this problem. For example, to mimic screen's
>> behaviour as discussed above, the user might create a "master" session
>> that is always kept in the background. When sessions are grouped with
>> the master session and flagged as transient, they are killed and tidied
>> up properly when their clients detach. This is especially handy for
>> preventing clutter when, for example, the user absent-mindedly closes a
>> client's terminal, killing it with a SIGHUP.
>>
>> Example:
>> $ # Create the master session f necessary:
>> $ tmux new-session -A -s TMUX_MASTER \; detach
>> $ # Create the transient client:
>> $ tmux -T -t TMUX_MASTER
>> ---
>>  cmd-new-session.c |  9 +++++++--
>>  server.c          | 19 +++++++++++++++++++
>>  tmux.1.in         |  7 ++++++-
>>  tmux.h            |  1 +
>>  4 files changed, 33 insertions(+), 3 deletions(-)
>>
>> diff --git a/cmd-new-session.c b/cmd-new-session.c
>> index 4eebe63..0147933 100644
>> --- a/cmd-new-session.c
>> +++ b/cmd-new-session.c
>> @@ -35,8 +35,8 @@ enum cmd_retval     cmd_new_session_exec(struct cmd
>> *, struct cmd_q *);
>>
>>  const struct cmd_entry cmd_new_session_entry = {
>>      "new-session", "new",
>> -    "AdDF:n:Ps:t:x:y:", 0, 1,
>> -    "[-AdDP] [-F format] [-n window-name] [-s session-name] "
>> +    "AdDF:n:Ps:t:Tx:y:", 0, 1,
>> +    "[-AdDPT] [-F format] [-n window-name] [-s session-name] "
>>      CMD_TARGET_SESSION_USAGE " [-x width] [-y height] [command]",
>>      CMD_STARTSERVER|CMD_CANTNEST|CMD_SENDENVIRON,
>>      NULL,
>> @@ -193,6 +193,11 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q 
>> *cmdq)
>>      }
>>      environ_free(&env);
>>
>> +    /* Flag the session as transient if the -T flag is given */
>> +    if (args_has(args, 'T')) {
>> +        s->flags |= SESSION_TRANSIENT;
>> +    }
>> +
>>      /* Set the initial window name if one given. */
>>      if (cmd != NULL && args_has(args, 'n')) {
>>          w = s->curw->window;
>> diff --git a/server.c b/server.c
>> index 4bfa918..7af0673 100644
>> --- a/server.c
>> +++ b/server.c
>> @@ -210,6 +210,7 @@ server_loop(void)
>>          server_client_loop();
>>
>>          key_bindings_clean();
>> +        server_kill_transient();
>>          server_clean_dead();
>>      }
>>  }
>> @@ -258,6 +259,24 @@ server_send_shutdown(void)
>>      }
>>  }
>>
>> +/* Kill all unattached sessions marked as transient. */
>> +void
>> +server_kill_transient(void)
>> +{
>> +    struct session *s, *next_s;
>> +
>> +    s = RB_MIN(sessions, &sessions);
>> +    while (s != NULL) {
>> +        next_s = RB_NEXT(sessions, &sessions, s);
>> +        if ((s->flags & SESSION_UNATTACHED) &&
>> +            (s->flags &     SESSION_TRANSIENT)) {
>> +            printf("Whadda faaaa?");
>> +            session_destroy(s);
>> +        }
>> +        s = next_s;
>> +    }
>> +}
>> +
>>  /* Free dead, unreferenced clients and sessions. */
>>  void
>>  server_clean_dead(void)
>> diff --git a/tmux.1.in b/tmux.1.in
>> index 98bf957..7797093 100644
>> --- a/tmux.1.in
>> +++ b/tmux.1.in
>> @@ -672,7 +672,7 @@ command.
>>  Lock all clients attached to
>>  .Ar target-session .
>>  .It Xo Ic new-session
>> -.Op Fl AdDP
>> +.Op Fl AdDPT
>>  .Op Fl F Ar format
>>  .Op Fl n Ar window-name
>>  .Op Fl s Ar session-name
>> @@ -740,6 +740,11 @@ are invalid if
>>  is used.
>>  .Pp
>>  The
>> +.Fl T
>> +option makes the session "transient"; when all of its clients are
>> +disconnected, it will be killed instead of detached.
>> +.Pp
>> +The
>>  .Fl P
>>  option prints information about the new session after it has been created.
>>  By default, it uses the format
>> diff --git a/tmux.h b/tmux.h
>> index f0b9edf..714c38f 100644
>> --- a/tmux.h
>> +++ b/tmux.h
>> @@ -1103,6 +1103,7 @@ struct session {
>>      struct options     options;
>>
>>  #define SESSION_UNATTACHED 0x1    /* not attached to any clients */
>> +#define SESSION_TRANSIENT 0x2 /* kill session when unattached */
>>      int         flags;
>>
>>      struct termios    *tio;
>> --
>> 1.8.2.1
>>
>> ------------------------------------------------------------------------------
>> Precog is a next-generation analytics platform capable of advanced
>> analytics on semi-structured data. The platform includes APIs for building
>> apps and a phenomenal toolset for data science. Developers can use
>> our toolset for easy data analysis & visualization. Get a free account!
>> http://www2.precog.com/precogplatform/slashdotnewsletter
>> _______________________________________________
>> tmux-users mailing list
>> tmux-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/tmux-users

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to