=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/format.c,v retrieving revision 1.147 retrieving revision 1.148 diff -u -r1.147 -r1.148 --- src/usr.bin/tmux/format.c 2017/10/12 11:32:27 1.147 +++ src/usr.bin/tmux/format.c 2017/11/02 18:27:35 1.148 @@ -1,4 +1,4 @@ -/* $OpenBSD: format.c,v 1.147 2017/10/12 11:32:27 nicm Exp $ */ +/* $OpenBSD: format.c,v 1.148 2017/11/02 18:27:35 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott @@ -572,11 +572,41 @@ evbuffer_add(buffer, ",", 1); evbuffer_add_printf(buffer, "%u", i); } - size = EVBUFFER_LENGTH(buffer); - xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer)); + if ((size = EVBUFFER_LENGTH(buffer)) != 0) + xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer)); evbuffer_free(buffer); } +/* Callback for session_group_others. */ +static void +format_cb_session_group_others(struct format_tree *ft, struct format_entry *fe) +{ + struct session *s = ft->s; + struct session_group *sg; + struct session *loop; + struct evbuffer *buffer; + int size; + + if (s == NULL) + return; + sg = session_group_contains(s); + if (sg == NULL) + return; + + buffer = evbuffer_new(); + TAILQ_FOREACH(loop, &sg->sessions, gentry) { + if (loop == s) + continue; + + if (EVBUFFER_LENGTH(buffer) > 0) + evbuffer_add(buffer, ",", 1); + evbuffer_add_printf(buffer, "%s", loop->name); + } + if ((size = EVBUFFER_LENGTH(buffer)) != 0) + xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer)); + evbuffer_free(buffer); +} + /* Merge a format tree. */ static void format_merge(struct format_tree *ft, struct format_tree *from) @@ -1253,8 +1283,13 @@ sg = session_group_contains(s); format_add(ft, "session_grouped", "%d", sg != NULL); - if (sg != NULL) + if (sg != NULL) { format_add(ft, "session_group", "%s", sg->name); + format_add(ft, "session_group_size", "%u", + session_group_count (sg)); + format_add_cb(ft, "session_group_others", + format_cb_session_group_others); + } format_add_tv(ft, "session_created", &s->creation_time); format_add_tv(ft, "session_last_attached", &s->last_attached_time);