diff options
-rw-r--r-- | usr.bin/tmux/cmd-list-clients.c | 46 | ||||
-rw-r--r-- | usr.bin/tmux/format.c | 38 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.1 | 25 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.h | 3 |
4 files changed, 90 insertions, 22 deletions
diff --git a/usr.bin/tmux/cmd-list-clients.c b/usr.bin/tmux/cmd-list-clients.c index 7b7b436b826..5d5a72debbc 100644 --- a/usr.bin/tmux/cmd-list-clients.c +++ b/usr.bin/tmux/cmd-list-clients.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-list-clients.c,v 1.8 2011/08/16 10:00:52 nicm Exp $ */ +/* $OpenBSD: cmd-list-clients.c,v 1.9 2011/10/23 01:12:46 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -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, + "F:t:", 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,32 @@ 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/usr.bin/tmux/format.c b/usr.bin/tmux/format.c index 98b54613bfd..304359f0dc0 100644 --- a/usr.bin/tmux/format.c +++ b/usr.bin/tmux/format.c @@ -1,4 +1,4 @@ -/* $OpenBSD: format.c,v 1.2 2011/10/02 06:55:48 nicm Exp $ */ +/* $OpenBSD: format.c,v 1.3 2011/10/23 01:12:46 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net> @@ -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/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index d758f8f7991..ac7c83d49f6 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.249 2011/10/02 06:55:48 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.250 2011/10/23 01:12:46 nicm 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: October 2 2011 $ +.Dd $Mdocdate: October 23 2011 $ .Dt TMUX 1 .Os .Sh NAME @@ -606,9 +606,16 @@ 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 Xo Ic list-clients +.Op Fl F Ar format +.Op Fl t Ar target-session +.Xc .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. @@ -2560,6 +2567,7 @@ is used. .El .Sh FORMATS The +.Ic list-clients , .Ic list-sessions , .Ic list-windows and @@ -2597,6 +2605,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/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index d6333093161..e5495c939e9 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.294 2011/08/26 10:53:16 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.295 2011/10/23 01:12:46 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1364,6 +1364,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 *); |