summaryrefslogtreecommitdiff
path: root/usr.bin/tmux
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2011-10-23 01:12:47 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2011-10-23 01:12:47 +0000
commitf2f88148396d78ebb44747d9c2149a804896ea23 (patch)
tree7660d9a5cfacfe49459758934982bfcd130b62d7 /usr.bin/tmux
parenta7df8607582762220136b4700ebdbd5cc8062ff4 (diff)
Add client formats, from Ben Boeckel.
Diffstat (limited to 'usr.bin/tmux')
-rw-r--r--usr.bin/tmux/cmd-list-clients.c46
-rw-r--r--usr.bin/tmux/format.c38
-rw-r--r--usr.bin/tmux/tmux.125
-rw-r--r--usr.bin/tmux/tmux.h3
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 *);