You're missing a : after F in the getopt args so this doesn't work ;-). I fixed that and applied this now, thanks.
On Thu, Oct 20, 2011 at 02:41:59PM -0400, Ben Boeckel wrote: > Hi, > > I've also updated list-clients to use format strings and added > formatters for client information as well. > > The first patch adds the formatting code, the second updates > list-clients to leverage it. > > --Ben > From 1bf0c319db1bb0a4c8f910097907ac945f44e7a0 Mon Sep 17 00:00:00 2001 > From: Ben Boeckel <maths...@gmail.com> > Date: Thu, 20 Oct 2011 14:25:25 -0400 > Subject: [PATCH 1/2] Add format strings for clients > > --- > trunk/format.c | 36 ++++++++++++++++++++++++++++++++++++ > trunk/tmux.1 | 11 +++++++++++ > trunk/tmux.h | 1 + > 3 files changed, 48 insertions(+), 0 deletions(-) > > diff --git a/trunk/format.c b/trunk/format.c > index 0aad938..74df2ab 100644 > --- a/trunk/format.c > +++ b/trunk/format.c > @@ -295,6 +295,42 @@ format_session(struct format_tree *ft, struct session *s) > format_add(ft, "session_attached", "%d", 1); > } > > +/* Set default format keys for a client. */ > +void > +format_client(struct format_tree *ft, struct client *c) > +{ > + char *tim; > + time_t t; > + > + format_add(ft, "client_cwd", "%s", c->cwd); > + format_add(ft, "client_height", "%u", c->tty.sx); > + format_add(ft, "client_width", "%u", c->tty.sy); > + format_add(ft, "client_tty", "%s", c->tty.path); > + format_add(ft, "client_termname", "%s", c->tty.termname); > + > + t = c->creation_time.tv_sec; > + format_add(ft, "client_created", "%ld", (long) t); > + tim = ctime(&t); > + *strchr(tim, '\n') = '\0'; > + format_add(ft, "client_created_string", "%s", tim); > + > + t = c->activity_time.tv_sec; > + format_add(ft, "client_activity", "%ld", (long) t); > + tim = ctime(&t); > + *strchr(tim, '\n') = '\0'; > + format_add(ft, "client_activity_string", "%s", tim); > + > + if (c->tty.flags & TTY_UTF8) > + format_add(ft, "client_utf8", "%d", 1); > + else > + format_add(ft, "client_utf8", "%d", 0); > + > + if (c->flags & CLIENT_READONLY) > + format_add(ft, "client_readonly", "%d", 1); > + else > + format_add(ft, "client_readonly", "%d", 0); > +} > + > /* Set default format keys for a winlink. */ > void > format_winlink(struct format_tree *ft, struct session *s, struct winlink *wl) > diff --git a/trunk/tmux.1 b/trunk/tmux.1 > index f56cf8d..39c7f66 100644 > --- a/trunk/tmux.1 > +++ b/trunk/tmux.1 > @@ -2601,6 +2601,17 @@ if it is unattached. > The following variables are available, where appropriate: > .Bl -column "session_created_string" "Replaced with" -offset indent > .It Sy "Variable name" Ta Sy "Replaced with" > +.It Li "client_activity" Ta "Integer time client last had activity" > +.It Li "client_activity_string" Ta "String time client last had activity" > +.It Li "client_created" Ta "Integer time client created" > +.It Li "client_created_string" Ta "String time client created" > +.It Li "client_cwd" Ta "Working directory of client" > +.It Li "client_height" Ta "Height of client" > +.It Li "client_readonly" Ta "1 if client is readonly" > +.It Li "client_termname" Ta "Terminal name of client" > +.It Li "client_tty" Ta "Pseudo terminal of client" > +.It Li "client_utf8" Ta "1 if client supports utf8" > +.It Li "client_width" Ta "Width of client" > .It Li "host" Ta "Hostname of local host" > .It Li "line" Ta "Line number in the list" > .It Li "pane_active" Ta "1 if active pane" > diff --git a/trunk/tmux.h b/trunk/tmux.h > index 74add28..12d401a 100644 > --- a/trunk/tmux.h > +++ b/trunk/tmux.h > @@ -1360,6 +1360,7 @@ void format_add( > const char *format_find(struct format_tree *, const char *); > char *format_expand(struct format_tree *, const char *); > void format_session(struct format_tree *, struct session *); > +void format_client(struct format_tree *, struct client *); > void format_winlink( > struct format_tree *, struct session *, struct winlink *); > void format_window_pane(struct format_tree *, struct window_pane *); > -- > 1.7.6.4 > > From b7e09931bb45fb42eb025748250e30a339757b83 Mon Sep 17 00:00:00 2001 > From: Ben Boeckel <maths...@gmail.com> > Date: Thu, 20 Oct 2011 14:28:54 -0400 > Subject: [PATCH 2/2] Use format strings in list-clients > > --- > trunk/cmd-list-clients.c | 43 +++++++++++++++++++++++++++---------------- > trunk/tmux.1 | 7 ++++++- > 2 files changed, 33 insertions(+), 17 deletions(-) > > diff --git a/trunk/cmd-list-clients.c b/trunk/cmd-list-clients.c > index bf16aae..6b48c6e 100644 > --- a/trunk/cmd-list-clients.c > +++ b/trunk/cmd-list-clients.c > @@ -31,8 +31,8 @@ int cmd_list_clients_exec(struct cmd *, struct cmd_ctx *); > > const struct cmd_entry cmd_list_clients_entry = { > "list-clients", "lsc", > - "t:", 0, 0, > - CMD_TARGET_SESSION_USAGE, > + "Ft:", 0, 0, > + "[-F format]" CMD_TARGET_SESSION_USAGE, > CMD_READONLY, > NULL, > NULL, > @@ -43,11 +43,13 @@ const struct cmd_entry cmd_list_clients_entry = { > int > cmd_list_clients_exec(struct cmd *self, struct cmd_ctx *ctx) > { > - struct args *args = self->args; > - struct client *c; > - struct session *s; > - u_int i; > - const char *s_utf8; > + struct args *args = self->args; > + struct client *c; > + struct session *s; > + struct format_tree *ft; > + const char *template; > + u_int i; > + char *line; > > if (args_has(args, 't')) { > s = cmd_find_session(ctx, args_get(args, 't'), 0); > @@ -56,22 +58,31 @@ cmd_list_clients_exec(struct cmd *self, struct cmd_ctx > *ctx) > } else > s = NULL; > > + template = args_get(args, 'F'); > + if (template == NULL) > + template = "#{client_tty}: #{session_name} " > + "[#{client_width}x#{client_height} #{client_termname}]" > + "#{?client_utf8, (utf8),}" > + "#{?client_readonly, (ro),}"; > + > for (i = 0; i < ARRAY_LENGTH(&clients); i++) { > c = ARRAY_ITEM(&clients, i); > if (c == NULL || c->session == NULL) > continue; > > - if (c->tty.flags & TTY_UTF8) > - s_utf8 = " (utf8)"; > - else > - s_utf8 = ""; > - > if (s != NULL && s != c->session) > continue; > - ctx->print(ctx, "%s: %s [%ux%u %s]%s%s", c->tty.path, > - c->session->name, c->tty.sx, c->tty.sy, > - c->tty.termname, s_utf8, > - c->flags & CLIENT_READONLY ? " (ro)" : ""); > + > + ft = format_create(); > + format_add(ft, "line", "%u", i); > + format_session(ft, c->session); > + format_client(ft, c); > + > + line = format_expand(ft, template); > + ctx->print(ctx, "%s", line); > + xfree(line); > + > + format_free(ft); > } > > return (0); > diff --git a/trunk/tmux.1 b/trunk/tmux.1 > index 39c7f66..71f25b1 100644 > --- a/trunk/tmux.1 > +++ b/trunk/tmux.1 > @@ -610,9 +610,13 @@ server and clients and destroy all sessions. > .It Ic kill-session Op Fl t Ar target-session > Destroy the given session, closing any windows linked to it and no other > sessions, and detaching all clients attached to it. > -.It Ic list-clients Op Fl t Ar target-session > +.It Ic list-clients Op Fl F Op Fl t Ar target-session > .D1 (alias: Ic lsc ) > List all clients attached to the server. > +For the meaning of the > +.Fl F > +flag, see the > +.Sx FORMATS section. > If > .Ar target-session > is specified, list only clients connected to that session. > @@ -2564,6 +2568,7 @@ is used. > .El > .Sh FORMATS > The > +.Ic list-clients , > .Ic list-sessions , > .Ic list-windows > and > -- > 1.7.6.4 > > ------------------------------------------------------------------------------ > The demand for IT networking professionals continues to grow, and the > demand for specialized networking skills is growing even more rapidly. > Take a complimentary Learning@Cisco Self-Assessment and learn > about Cisco certifications, training, and career opportunities. > http://p.sf.net/sfu/cisco-dev2dev > _______________________________________________ > tmux-users mailing list > tmux-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tmux-users ------------------------------------------------------------------------------ The demand for IT networking professionals continues to grow, and the demand for specialized networking skills is growing even more rapidly. Take a complimentary Learning@Cisco Self-Assessment and learn about Cisco certifications, training, and career opportunities. http://p.sf.net/sfu/cisco-dev2dev _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users