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

Reply via email to