On Sat, Mar 26, 2011 at 06:39:12PM -0400, Ben Boeckel wrote: > 0001-Add-support-for-pane-ID.patch > > The original patch rebased onto master > (568c723cf33426c1f7fe9419966cf111792f71fb). > > 0002-Only-store-the-session-back-if-non-NULL.patch > > Fixes the crash with swap-panes. The cmd_find_pane function is > called with a NULL session in this case. > > 0003-Print-the-pane-ID-when-listing-panes.patch > > Add the ID to the output when listing panes. > > 0004-Add-list-session-panes-command.patch > 0005-Add-list-server-panes-command.patch > > These two add commands to list panes with different scopes. Maybe a > list-server-windows would be in order as well? > > 0006-Fix-list-panes-documentation-to-match-the-rest.patch > > Minor fix to the manpage for list-panes to match the rest of the > documentation. > > 0007-Remove-pane-id-from-TODO-list.patch > > Mark the pane ID feature off the TODO list. > > 0008-Add-I-flag-to-new-window-and-split-window.patch > > Add a -I flag to new-window and split-window commands (similar to > -P) to print the ID of the new window.
And I forget to attach them... --Ben
From 4c731f2854e6854cd72c39d9765a5b5969f555bb Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sun, 6 Mar 2011 05:25:09 -0500 Subject: [PATCH 1/8] Add support for pane ID --- cmd.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------- server.c | 1 + tmux.h | 8 +++++ window.c | 31 +++++++++++++++++++- 4 files changed, 125 insertions(+), 12 deletions(-) diff --git a/cmd.c b/cmd.c index d5f6374..20dd70c 100644 --- a/cmd.c +++ b/cmd.c @@ -117,9 +117,12 @@ struct client *cmd_lookup_client(const char *); struct session *cmd_lookup_session(const char *, int *); struct winlink *cmd_lookup_window(struct session *, const char *, int *); int cmd_lookup_index(struct session *, const char *, int *); +struct window_pane *cmd_lookup_paneid(const char *); +struct session *cmd_pane_session(struct cmd_ctx *, + struct window_pane *, struct winlink **); struct winlink *cmd_find_window_offset(const char *, struct session *, int *); int cmd_find_index_offset(const char *, struct session *, int *); -struct window_pane *cmd_find_pane_offset(const char *, struct winlink *); +struct window_pane *cmd_find_pane_offset(const char *, struct winlink *); int cmd_pack_argv(int argc, char **argv, char *buf, size_t len) @@ -638,21 +641,78 @@ cmd_lookup_index(struct session *s, const char *name, int *ambiguous) return (-1); } +/* + * Lookup pane id. An initial % means a pane id. sp must already point to the + * current session. + */ +struct window_pane * +cmd_lookup_paneid(const char *arg) +{ + const char *errstr; + u_int paneid; + + if (*arg != '%') + return (NULL); + + paneid = strtonum(arg + 1, 0, UINT_MAX, &errstr); + if (errstr != NULL) + return (NULL); + return (window_pane_find_by_id(paneid)); +} + +/* Find session and winlink for pane. */ +struct session * +cmd_pane_session(struct cmd_ctx *ctx, struct window_pane *wp, + struct winlink **wlp) +{ + struct session *s; + struct sessionslist ss; + struct winlink *wl; + + /* If this pane is in the current session, return that winlink. */ + s = cmd_current_session(ctx); + if (s != NULL) { + wl = winlink_find_by_window(&s->windows, wp->window); + if (wl != NULL) { + if (wlp != NULL) + *wlp = wl; + return (s); + } + } + + /* Otherwise choose from all sessions with this pane. */ + ARRAY_INIT(&ss); + RB_FOREACH(s, sessions, &sessions) { + if (winlink_find_by_window(&s->windows, wp->window) != NULL) + ARRAY_ADD(&ss, s); + } + s = cmd_choose_session_list(&ss); + ARRAY_FREE(&ss); + if (wlp != NULL) + *wlp = winlink_find_by_window(&s->windows, wp->window); + return (s); +} + /* Find the target session or report an error and return NULL. */ struct session * cmd_find_session(struct cmd_ctx *ctx, const char *arg) { - struct session *s; - struct client *c; - char *tmparg; - size_t arglen; - int ambiguous; + struct session *s; + struct window_pane *wp; + struct client *c; + char *tmparg; + size_t arglen; + int ambiguous; /* A NULL argument means the current session. */ if (arg == NULL) return (cmd_current_session(ctx)); tmparg = xstrdup(arg); + /* Lookup as pane id. */ + if ((wp = cmd_lookup_paneid(arg)) != NULL) + return (cmd_pane_session(ctx, wp, NULL)); + /* Trim a single trailing colon if any. */ arglen = strlen(tmparg); if (arglen != 0 && tmparg[arglen - 1] == ':') @@ -681,11 +741,12 @@ cmd_find_session(struct cmd_ctx *ctx, const char *arg) struct winlink * cmd_find_window(struct cmd_ctx *ctx, const char *arg, struct session **sp) { - struct session *s; - struct winlink *wl; - const char *winptr; - char *sessptr = NULL; - int ambiguous = 0; + struct session *s; + struct winlink *wl; + struct window_pane *wp; + const char *winptr; + char *sessptr = NULL; + int ambiguous = 0; /* * Find the current session. There must always be a current session, if @@ -703,6 +764,14 @@ cmd_find_window(struct cmd_ctx *ctx, const char *arg, struct session **sp) return (s->curw); } + /* Lookup as pane id. */ + if ((wp = cmd_lookup_paneid(arg)) != NULL) { + s = cmd_pane_session(ctx, wp, &wl); + if (sp != NULL) + *sp = s; + return (wl); + } + /* Time to look at the argument. If it is empty, that is an error. */ if (*arg == '\0') goto not_found; @@ -997,6 +1066,12 @@ cmd_find_pane(struct cmd_ctx *ctx, return (s->curw); } + /* Lookup as pane id. */ + if ((*wpp = cmd_lookup_paneid(arg)) != NULL) { + *sp = cmd_pane_session(ctx, *wpp, &wl); + return (wl); + } + /* Look for a separating period. */ if ((period = strrchr(arg, '.')) == NULL) goto no_period; diff --git a/server.c b/server.c index 9b3b0d3..86a5b00 100644 --- a/server.c +++ b/server.c @@ -142,6 +142,7 @@ server_start(void) log_debug("server started, pid %ld", (long) getpid()); ARRAY_INIT(&windows); + RB_INIT(&all_window_panes); ARRAY_INIT(&clients); ARRAY_INIT(&dead_clients); RB_INIT(&sessions); diff --git a/tmux.h b/tmux.h index 3e1b26b..a547ec8 100644 --- a/tmux.h +++ b/tmux.h @@ -775,6 +775,8 @@ struct window_mode { /* Child window structure. */ struct window_pane { + u_int id; + struct window *window; struct layout_cell *layout_cell; @@ -817,8 +819,10 @@ struct window_pane { void *modedata; TAILQ_ENTRY(window_pane) entry; + RB_ENTRY(window_pane) tree_entry; }; TAILQ_HEAD(window_panes, window_pane); +RB_HEAD(window_pane_tree, window_pane); /* Window structure. */ struct window { @@ -1821,8 +1825,11 @@ int screen_check_selection(struct screen *, u_int, u_int); /* window.c */ extern struct windows windows; +extern struct window_pane_tree all_window_panes; int winlink_cmp(struct winlink *, struct winlink *); RB_PROTOTYPE(winlinks, winlink, entry, winlink_cmp); +int window_pane_cmp(struct window_pane *, struct window_pane *); +RB_PROTOTYPE(window_pane_tree, window_pane, tree_entry, window_pane_cmp); struct winlink *winlink_find_by_index(struct winlinks *, int); struct winlink *winlink_find_by_window(struct winlinks *, struct window *); int winlink_next_index(struct winlinks *, int); @@ -1857,6 +1864,7 @@ struct window_pane *window_pane_previous_by_number(struct window *, u_int window_pane_index(struct window *, struct window_pane *); u_int window_count_panes(struct window *); void window_destroy_panes(struct window *); +struct window_pane *window_pane_find_by_id(u_int); struct window_pane *window_pane_create(struct window *, u_int, u_int, u_int); void window_pane_destroy(struct window_pane *); int window_pane_spawn(struct window_pane *, const char *, diff --git a/window.c b/window.c index 02bc5e6..1a02f81 100644 --- a/window.c +++ b/window.c @@ -53,6 +53,10 @@ /* Global window list. */ struct windows windows; +/* Global panes tree. */ +struct window_pane_tree all_window_panes; +u_int next_window_pane; + void window_pane_read_callback(struct bufferevent *, void *); void window_pane_error_callback(struct bufferevent *, short, void *); @@ -64,6 +68,14 @@ winlink_cmp(struct winlink *wl1, struct winlink *wl2) return (wl1->idx - wl2->idx); } +RB_GENERATE(window_pane_tree, window_pane, tree_entry, window_pane_cmp); + +int +window_pane_cmp(struct window_pane *wp1, struct window_pane *wp2) +{ + return (wp1->id - wp2->id); +} + struct winlink * winlink_find_by_window(struct winlinks *wwl, struct window *w) { @@ -492,6 +504,16 @@ window_printable_flags(struct session *s, struct winlink *wl) return (xstrdup(flags)); } +/* Find pane in global tree by id. */ +struct window_pane * +window_pane_find_by_id(u_int id) +{ + struct window_pane wp; + + wp.id = id; + return (RB_FIND(window_pane_tree, &all_window_panes, &wp)); +} + struct window_pane * window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) { @@ -500,6 +522,9 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp = xcalloc(1, sizeof *wp); wp->window = w; + wp->id = next_window_pane++; + RB_INSERT(window_pane_tree, &all_window_panes, wp); + wp->cmd = NULL; wp->shell = NULL; wp->cwd = NULL; @@ -552,6 +577,8 @@ window_pane_destroy(struct window_pane *wp) bufferevent_free(wp->pipe_event); } + RB_REMOVE(window_pane_tree, &all_window_panes, wp); + if (wp->cwd != NULL) xfree(wp->cwd); if (wp->shell != NULL) @@ -566,7 +593,7 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell, const char *cwd, struct environ *env, struct termios *tio, char **cause) { struct winsize ws; - char *argv0; + char *argv0, paneid[16]; const char *ptr; struct termios tio2; @@ -613,6 +640,8 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell, closefrom(STDERR_FILENO + 1); + xsnprintf(paneid, sizeof paneid, "%%%u", wp->id); + environ_set(env, "TMUX_PANE", paneid); environ_push(env); clear_signals(1); -- 1.7.4.1
From b2ebf965d55a515e6410e5e4e5507ad85f572288 Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 16:46:58 -0400 Subject: [PATCH 2/8] Only store the session back if non-NULL --- cmd.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/cmd.c b/cmd.c index 20dd70c..1690900 100644 --- a/cmd.c +++ b/cmd.c @@ -1068,7 +1068,9 @@ cmd_find_pane(struct cmd_ctx *ctx, /* Lookup as pane id. */ if ((*wpp = cmd_lookup_paneid(arg)) != NULL) { - *sp = cmd_pane_session(ctx, *wpp, &wl); + struct session* session = cmd_pane_session(ctx, *wpp, &wl); + if (sp != NULL) + *sp = session; return (wl); } -- 1.7.4.1
From e5659fe96f3ce699f75064695f42b80d9a98d9ea Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 16:58:29 -0400 Subject: [PATCH 3/8] Print the pane ID when listing panes --- cmd-list-panes.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-list-panes.c b/cmd-list-panes.c index 72e8edc..c8aa7e9 100644 --- a/cmd-list-panes.c +++ b/cmd-list-panes.c @@ -64,8 +64,8 @@ cmd_list_panes_exec(struct cmd *self, struct cmd_ctx *ctx) } size += gd->hsize * sizeof *gd->linedata; - ctx->print(ctx, "%u: [%ux%u] [history %u/%u, %llu bytes]%s%s", - n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, + ctx->print(ctx, "%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s", + n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, wp->id, wp == wp->window->active ? " (active)" : "", wp->fd == -1 ? " (dead)" : ""); n++; -- 1.7.4.1
From 9cb6a7ed1dad12ccb581fca7b04f6da80cfb3619 Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 17:41:45 -0400 Subject: [PATCH 4/8] Add list-session-panes command --- Makefile.am | 1 + cmd-list-session-panes.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++ cmd.c | 1 + examples/tmux.vim | 3 +- tmux.1 | 6 +++ tmux.h | 1 + 6 files changed, 93 insertions(+), 1 deletions(-) create mode 100644 cmd-list-session-panes.c diff --git a/Makefile.am b/Makefile.am index 62d704a..27d5cb2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -96,6 +96,7 @@ dist_tmux_SOURCES = \ cmd-list-commands.c \ cmd-list-keys.c \ cmd-list-panes.c \ + cmd-list-session-panes.c \ cmd-list-sessions.c \ cmd-list-windows.c \ cmd-list.c \ diff --git a/cmd-list-session-panes.c b/cmd-list-session-panes.c new file mode 100644 index 0000000..4ef28d5 --- /dev/null +++ b/cmd-list-session-panes.c @@ -0,0 +1,82 @@ +/* $Id: cmd-list-session-panes.c,v 1.7 2011/01/07 14:45:34 tcunha Exp $ */ + +/* + * Copyright (c) 2009 Nicholas Marriott <n...@users.sourceforge.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> + +#include <unistd.h> + +#include "tmux.h" + +/* + * List panes in a given session. + */ + +int cmd_list_session_panes_exec(struct cmd *, struct cmd_ctx *); + +const struct cmd_entry cmd_list_session_panes_entry = { + "list-session-panes", "lssp", + "t:", 0, 0, + CMD_TARGET_SESSION_USAGE, + 0, + NULL, + NULL, + cmd_list_session_panes_exec +}; + +int +cmd_list_session_panes_exec(struct cmd *self, struct cmd_ctx *ctx) +{ + struct args *args = self->args; + struct session *s; + struct winlink *wl; + struct window_pane *wp; + struct grid *gd; + struct grid_line *gl; + u_int i, n; + unsigned long long size; + + if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + return (-1); + + RB_FOREACH(wl, winlinks, &s->windows) { + n = 0; + TAILQ_FOREACH(wp, &wl->window->panes, entry) { + gd = wp->base.grid; + + size = 0; + for (i = 0; i < gd->hsize; i++) { + gl = &gd->linedata[i]; + size += gl->cellsize * sizeof *gl->celldata; + size += gl->utf8size * sizeof *gl->utf8data; + } + size += gd->hsize * sizeof *gd->linedata; + + ctx->print(ctx, "%d.%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s", + wl->idx, n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, wp->id, + wp == wp->window->active ? " (active)" : "", + wp->fd == -1 ? " (dead)" : ""); + n++; + } + } + + if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) + return (-1); + + + return (0); +} diff --git a/cmd.c b/cmd.c index 1690900..b5b34ac 100644 --- a/cmd.c +++ b/cmd.c @@ -60,6 +60,7 @@ const struct cmd_entry *cmd_table[] = { &cmd_list_commands_entry, &cmd_list_keys_entry, &cmd_list_panes_entry, + &cmd_list_session_panes_entry, &cmd_list_sessions_entry, &cmd_list_windows_entry, &cmd_load_buffer_entry, diff --git a/examples/tmux.vim b/examples/tmux.vim index eb607a4..6648f93 100644 --- a/examples/tmux.vim +++ b/examples/tmux.vim @@ -41,7 +41,8 @@ syn keyword tmuxCmds clearhist clear-history selectl select-layout if[-shell] syn keyword tmuxCmds display[-message] setenv set-environment showenv syn keyword tmuxCmds show-environment choose-client displayp display-panes syn keyword tmuxCmds run[-shell] lockc lock-client locks lock-session lsp -syn keyword tmuxCmds list-panes pipep pipe-pane showmsgs show-messages capturep +syn keyword tmuxCmds list-panes lssp list-session-panes +syn keyword tmuxCmds pipep pipe-pane showmsgs show-messages capturep syn keyword tmuxCmds capture-pane joinp join-pane choose-buffer syn keyword tmuxOptsSet prefix status status-fg status-bg bell-action diff --git a/tmux.1 b/tmux.1 index 8d462e7..a09e1dc 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1103,6 +1103,12 @@ is given, the newly linked window is not selected. .D1 (alias: Ic lsp ) List the panes in the current window or in .Ar target-window . +.It Xo Ic list-session-panes +.Op Fl t Ar target-session +.Xc +.D1 (alias: Ic lssp ) +List the panes in the current session or in +.Ar target-session . .It Ic list-windows Op Fl t Ar target-session .D1 (alias: Ic lsw ) List windows in the current session or in diff --git a/tmux.h b/tmux.h index a547ec8..becc867 100644 --- a/tmux.h +++ b/tmux.h @@ -1529,6 +1529,7 @@ extern const struct cmd_entry cmd_list_clients_entry; extern const struct cmd_entry cmd_list_commands_entry; extern const struct cmd_entry cmd_list_keys_entry; extern const struct cmd_entry cmd_list_panes_entry; +extern const struct cmd_entry cmd_list_session_panes_entry; extern const struct cmd_entry cmd_list_sessions_entry; extern const struct cmd_entry cmd_list_windows_entry; extern const struct cmd_entry cmd_load_buffer_entry; -- 1.7.4.1
From a56df7d34a8fc6c4246732147f15383c277802de Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 17:42:16 -0400 Subject: [PATCH 5/8] Add list-server-panes command --- Makefile.am | 1 + cmd-list-server-panes.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++ cmd.c | 1 + examples/tmux.vim | 2 +- tmux.1 | 3 ++ tmux.h | 1 + 6 files changed, 83 insertions(+), 1 deletions(-) create mode 100644 cmd-list-server-panes.c diff --git a/Makefile.am b/Makefile.am index 27d5cb2..4394019 100644 --- a/Makefile.am +++ b/Makefile.am @@ -96,6 +96,7 @@ dist_tmux_SOURCES = \ cmd-list-commands.c \ cmd-list-keys.c \ cmd-list-panes.c \ + cmd-list-server-panes.c \ cmd-list-session-panes.c \ cmd-list-sessions.c \ cmd-list-windows.c \ diff --git a/cmd-list-server-panes.c b/cmd-list-server-panes.c new file mode 100644 index 0000000..280187c --- /dev/null +++ b/cmd-list-server-panes.c @@ -0,0 +1,76 @@ +/* $Id: cmd-list-server-panes.c,v 1.7 2011/01/07 14:45:34 tcunha Exp $ */ + +/* + * Copyright (c) 2009 Nicholas Marriott <n...@users.sourceforge.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> + +#include <unistd.h> + +#include "tmux.h" + +/* + * List all panes in the server. + */ + +int cmd_list_server_panes_exec(struct cmd *, struct cmd_ctx *); + +const struct cmd_entry cmd_list_server_panes_entry = { + "list-server-panes", "lssrp", + "", 0, 0, + "", + 0, + NULL, + NULL, + cmd_list_server_panes_exec +}; + +int +cmd_list_server_panes_exec(unused struct cmd *self, struct cmd_ctx *ctx) +{ + struct session *s; + struct winlink *wl; + struct window_pane *wp; + struct grid *gd; + struct grid_line *gl; + u_int i, n; + unsigned long long size; + + RB_FOREACH(s, sessions, &sessions) { + RB_FOREACH(wl, winlinks, &s->windows) { + n = 0; + TAILQ_FOREACH(wp, &wl->window->panes, entry) { + gd = wp->base.grid; + + size = 0; + for (i = 0; i < gd->hsize; i++) { + gl = &gd->linedata[i]; + size += gl->cellsize * sizeof *gl->celldata; + size += gl->utf8size * sizeof *gl->utf8data; + } + size += gd->hsize * sizeof *gd->linedata; + + ctx->print(ctx, "%s:%d.%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s", + s->name, wl->idx, n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, wp->id, + wp == wp->window->active ? " (active)" : "", + wp->fd == -1 ? " (dead)" : ""); + n++; + } + } + } + + return (0); +} diff --git a/cmd.c b/cmd.c index b5b34ac..bbbc880 100644 --- a/cmd.c +++ b/cmd.c @@ -60,6 +60,7 @@ const struct cmd_entry *cmd_table[] = { &cmd_list_commands_entry, &cmd_list_keys_entry, &cmd_list_panes_entry, + &cmd_list_server_panes_entry, &cmd_list_session_panes_entry, &cmd_list_sessions_entry, &cmd_list_windows_entry, diff --git a/examples/tmux.vim b/examples/tmux.vim index 6648f93..38c1e9d 100644 --- a/examples/tmux.vim +++ b/examples/tmux.vim @@ -41,7 +41,7 @@ syn keyword tmuxCmds clearhist clear-history selectl select-layout if[-shell] syn keyword tmuxCmds display[-message] setenv set-environment showenv syn keyword tmuxCmds show-environment choose-client displayp display-panes syn keyword tmuxCmds run[-shell] lockc lock-client locks lock-session lsp -syn keyword tmuxCmds list-panes lssp list-session-panes +syn keyword tmuxCmds list-panes lssrp list-server-panes lssp list-session-panes syn keyword tmuxCmds pipep pipe-pane showmsgs show-messages capturep syn keyword tmuxCmds capture-pane joinp join-pane choose-buffer diff --git a/tmux.1 b/tmux.1 index a09e1dc..d306210 100644 --- a/tmux.1 +++ b/tmux.1 @@ -583,6 +583,9 @@ List all clients attached to the server. .D1 (alias: Ic lscm ) List the syntax of all commands supported by .Nm . +.It Ic list-server-panes +.D1 (alias: Ic lssrp ) +List all the panes in the server. .It Ic list-sessions .D1 (alias: Ic ls ) List all sessions managed by the server. diff --git a/tmux.h b/tmux.h index becc867..13e34a6 100644 --- a/tmux.h +++ b/tmux.h @@ -1529,6 +1529,7 @@ extern const struct cmd_entry cmd_list_clients_entry; extern const struct cmd_entry cmd_list_commands_entry; extern const struct cmd_entry cmd_list_keys_entry; extern const struct cmd_entry cmd_list_panes_entry; +extern const struct cmd_entry cmd_list_server_panes_entry; extern const struct cmd_entry cmd_list_session_panes_entry; extern const struct cmd_entry cmd_list_sessions_entry; extern const struct cmd_entry cmd_list_windows_entry; -- 1.7.4.1
From f269d36b12cae51f7d720fd8c038cf5b229d75b4 Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 17:42:27 -0400 Subject: [PATCH 6/8] Fix list-panes documentation to match the rest --- tmux.1 | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/tmux.1 b/tmux.1 index d306210..232d292 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1102,7 +1102,9 @@ exists, it is killed, otherwise an error is generated. If .Fl d is given, the newly linked window is not selected. -.It Ic list-panes Op Fl t Ar target-window +.It Xo Ic list-panes +.Op Fl t Ar target-window +.Xc .D1 (alias: Ic lsp ) List the panes in the current window or in .Ar target-window . -- 1.7.4.1
From 0b58a44182f4fade2d4c9ee656215f1437ce4993 Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 17:44:20 -0400 Subject: [PATCH 7/8] Remove pane-id from TODO list --- TODO | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index e51e517..0506887 100644 --- a/TODO +++ b/TODO @@ -101,8 +101,6 @@ - a history of commands that can be reversed (reverse member of each command, and a buffer) info() when changing to same window - don't pass UTF-8 through vis for titles -- add a unique ever-increasing pane id to each pane, export it in $TMUX_PANE - (as %1, %2 etc) and allow it to be used as a target - way to add dest for break-pane; maybe some easier way to unbreak-pane - case insensitive searching - pane-index option like base-index -- 1.7.4.1
From 2136eb7e2e14af40397a4e33746133050bfd5dbf Mon Sep 17 00:00:00 2001 From: Ben Boeckel <maths...@gmail.com> Date: Sat, 26 Mar 2011 18:28:50 -0400 Subject: [PATCH 8/8] Add -I flag to new-window and split-window This is similar to the -P flag, but instead prints the ID of the new window. --- cmd-new-window.c | 6 ++++-- cmd-split-window.c | 6 ++++-- tmux.1 | 16 ++++++++++++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/cmd-new-window.c b/cmd-new-window.c index 79e301f..85b025d 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -30,8 +30,8 @@ int cmd_new_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_new_window_entry = { "new-window", "neww", - "adkn:Pt:", 0, 1, - "[-adk] [-n window-name] [-t target-window] [command]", + "adkn:PIt:", 0, 1, + "[-adkPI] [-n window-name] [-t target-window] [command]", 0, NULL, NULL, @@ -122,5 +122,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) if (args_has(args, 'P')) ctx->print(ctx, "%s:%u", s->name, wl->idx); + if (args_has(args, 'I')) + ctx->print(ctx, "%%%u", wl->window->active->id); return (0); } diff --git a/cmd-split-window.c b/cmd-split-window.c index 1aedf90..d19a7b3 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -32,8 +32,8 @@ int cmd_split_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_split_window_entry = { "split-window", "splitw", - "dl:hp:Pt:v", 0, 1, - "[-dhvP] [-p percentage|-l size] [-t target-pane] [command]", + "dl:hp:PIt:v", 0, 1, + "[-dhvPI] [-p percentage|-l size] [-t target-pane] [command]", 0, cmd_split_window_key_binding, NULL, @@ -140,6 +140,8 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) paneidx = window_pane_index(wl->window, new_wp); ctx->print(ctx, "%s:%u.%u", s->name, wl->idx, paneidx); } + if (args_has(args, 'I')) + ctx->print(ctx, "%%%u", new_wp->id); return (0); error: diff --git a/tmux.1 b/tmux.1 index 232d292..c229686 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1131,7 +1131,7 @@ except the window at is moved to .Ar dst-window . .It Xo Ic new-window -.Op Fl adkP +.Op Fl adkPI .Op Fl n Ar window-name .Op Fl t Ar target-window .Op Ar shell-command @@ -1183,6 +1183,10 @@ start-up files. The .Fl P option prints the location of the new window after it has been created. +.Pp +The +.Fl I +option prints the id of the new window after it has been created. .It Ic next-layout Op Fl t Ar target-window .D1 (alias: Ic nextl ) Move a window to the next layout and rearrange the panes to fit. @@ -1345,7 +1349,7 @@ and .Ic previous-window commands. .It Xo Ic split-window -.Op Fl dhvP +.Op Fl dhvPI .Oo Fl l .Ar size | .Fl p Ar percentage Oc @@ -1370,6 +1374,14 @@ cells (for horizontal split), or as a percentage, respectively. All other options have the same meaning as for the .Ic new-window command. +.Pp +The +.Fl P +option prints the location of the new window after it has been created. +.Pp +The +.Fl I +option prints the id of the new window after it has been created. .It Xo Ic swap-pane .Op Fl dDU .Op Fl s Ar src-pane -- 1.7.4.1
pgpzcT3ykhV5t.pgp
Description: PGP signature
------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users