Hi Seems fine, but instead of returning (u_int)-1 can we change it to work like window_index.
On Wed, Oct 19, 2011 at 06:25:25PM -0400, Ben Boeckel wrote: > Hi, > > The -F flag is great! I found out that pane_index was not implemented > however. The first patch adds pane_index to the format_tree. The second > patch fixes list-panes to use it rather than the 'line' format it > implements itself. The third patch fixes window_pane_index to return > (u_int)(-1) if the pane is not in the window given and logs a message > about it. > > The third patch made me wonder whether it's unnecessary to pass the > window when getting a pane index since a pane knows the window it is a > member of anyways. A fourth patch changes it to do this. I've not hit > any issues yet, but I'll use it for a week or so to make sure. > > --Ben > From 7c76a713a897c03482fa18c52d140a8835a3a30e Mon Sep 17 00:00:00 2001 > From: Ben Boeckel <maths...@gmail.com> > Date: Wed, 19 Oct 2011 17:39:16 -0400 > Subject: [PATCH 1/4] Implement the pane_index format string > > --- > trunk/format.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/trunk/format.c b/trunk/format.c > index 0aad938..780e224 100644 > --- a/trunk/format.c > +++ b/trunk/format.c > @@ -325,6 +325,7 @@ format_window_pane(struct format_tree *ft, struct > window_pane *wp) > struct grid_line *gl; > unsigned long long size; > u_int i; > + u_int idx; > > size = 0; > for (i = 0; i < gd->hsize; i++) { > @@ -334,8 +335,11 @@ format_window_pane(struct format_tree *ft, struct > window_pane *wp) > } > size += gd->hsize * sizeof *gd->linedata; > > + idx = window_pane_index(wp->window, wp); > + > format_add(ft, "pane_width", "%u", wp->sx); > format_add(ft, "pane_height", "%u", wp->sy); > + format_add(ft, "pane_index", "%u", idx); > format_add(ft, "pane_title", "%s", wp->base.title); > format_add(ft, "history_size", "%u", gd->hsize); > format_add(ft, "history_limit", "%u", gd->hlimit); > -- > 1.7.6.4 > > From b495fb3ec384c5be1ca3429339fb2fefeec1ac5c Mon Sep 17 00:00:00 2001 > From: Ben Boeckel <maths...@gmail.com> > Date: Wed, 19 Oct 2011 17:39:31 -0400 > Subject: [PATCH 2/4] Use the pane_index format string > > --- > trunk/cmd-list-panes.c | 7 +++---- > 1 files changed, 3 insertions(+), 4 deletions(-) > > diff --git a/trunk/cmd-list-panes.c b/trunk/cmd-list-panes.c > index 723c703..f46c3c5 100644 > --- a/trunk/cmd-list-panes.c > +++ b/trunk/cmd-list-panes.c > @@ -102,21 +102,21 @@ cmd_list_panes_window(struct cmd *self, > if (template == NULL) { > switch (type) { > case 0: > - template = "#{line}: " > + template = "#{pane_index}: " > "[#{pane_width}x#{pane_height}] [history " > "#{history_size}/#{history_limit}, " > "#{history_bytes} bytes] #{pane_id}" > "#{?pane_active, (active),}#{?pane_dead, (dead),}"; > break; > case 1: > - template = "#{window_index}.#{line}: " > + template = "#{window_index}.#{pane_index}: " > "[#{pane_width}x#{pane_height}] [history " > "#{history_size}/#{history_limit}, " > "#{history_bytes} bytes] #{pane_id}" > "#{?pane_active, (active),}#{?pane_dead, (dead),}"; > break; > case 2: > - template = "#{session_name}:#{window_index}.#{line}: " > + template = > "#{session_name}:#{window_index}.#{pane_index}: " > "[#{pane_width}x#{pane_height}] [history " > "#{history_size}/#{history_limit}, " > "#{history_bytes} bytes] #{pane_id}" > @@ -128,7 +128,6 @@ cmd_list_panes_window(struct cmd *self, > n = 0; > TAILQ_FOREACH(wp, &wl->window->panes, entry) { > ft = format_create(); > - format_add(ft, "line", "%u", n); > format_session(ft, s); > format_winlink(ft, s, wl); > format_window_pane(ft, wp); > -- > 1.7.6.4 > > From 95570f01e11670a0f2b70c71b95defa0c17df432 Mon Sep 17 00:00:00 2001 > From: Ben Boeckel <maths...@gmail.com> > Date: Wed, 19 Oct 2011 17:43:32 -0400 > Subject: [PATCH 3/4] Return '-1' for invalid pane index queries > > If we're going to return a bogus index anyways (one past the max index > in the window), at make it a consistent and obviously invalid index > instead of a plausible one. Also log a message. > --- > trunk/window.c | 13 ++++++++++++- > 1 files changed, 12 insertions(+), 1 deletions(-) > > diff --git a/trunk/window.c b/trunk/window.c > index 8b82c06..eb35a85 100644 > --- a/trunk/window.c > +++ b/trunk/window.c > @@ -488,13 +488,24 @@ window_pane_index(struct window *w, struct window_pane > *wp) > { > struct window_pane *wq; > u_int n; > + int found; > > n = options_get_number(&w->options, "pane-base-index"); > + found = 0; > TAILQ_FOREACH(wq, &w->panes, entry) { > - if (wp == wq) > + if (wp == wq) { > + found = 1; > break; > + } > n++; > } > + > + if (!found) { > + if (debug_level > 0) > + log_warnx("could not find pane in window"); > + n = (u_int)(-1); > + } > + > return (n); > } > > -- > 1.7.6.4 > > From 3be855a5062b2da9bf86dc3888e4fc9b2afad052 Mon Sep 17 00:00:00 2001 > From: Ben Boeckel <maths...@gmail.com> > Date: Wed, 19 Oct 2011 18:17:52 -0400 > Subject: [PATCH 4/4] Make window_pane_index just take a pane > > Since a pane knows the window it belongs to, a window does not need to > be passed as well. > --- > trunk/cmd-respawn-pane.c | 4 ++-- > trunk/cmd-split-window.c | 2 +- > trunk/format.c | 5 +---- > trunk/screen-redraw.c | 2 +- > trunk/status.c | 2 +- > trunk/tmux.h | 2 +- > trunk/window.c | 3 ++- > 7 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/trunk/cmd-respawn-pane.c b/trunk/cmd-respawn-pane.c > index 7e272a8..232ef72 100644 > --- a/trunk/cmd-respawn-pane.c > +++ b/trunk/cmd-respawn-pane.c > @@ -49,7 +49,7 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_ctx *ctx) > struct session *s; > struct environ env; > const char *cmd; > - char *cause; > + char *cause; > > if ((wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp)) == NULL) > return (-1); > @@ -57,7 +57,7 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_ctx *ctx) > > if (!args_has(self->args, 'k') && wp->fd != -1) { > ctx->error(ctx, "pane still active: %s:%u.%u", > - s->name, wl->idx, window_pane_index(w, wp)); > + s->name, wl->idx, window_pane_index(wp)); > return (-1); > } > > diff --git a/trunk/cmd-split-window.c b/trunk/cmd-split-window.c > index 6a95e1b..22e6113 100644 > --- a/trunk/cmd-split-window.c > +++ b/trunk/cmd-split-window.c > @@ -139,7 +139,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx > *ctx) > environ_free(&env); > > if (args_has(args, 'P')) { > - paneidx = window_pane_index(wl->window, new_wp); > + paneidx = window_pane_index(new_wp); > ctx->print(ctx, "%s:%u.%u", s->name, wl->idx, paneidx); > } > return (0); > diff --git a/trunk/format.c b/trunk/format.c > index 780e224..3acfc3f 100644 > --- a/trunk/format.c > +++ b/trunk/format.c > @@ -325,7 +325,6 @@ format_window_pane(struct format_tree *ft, struct > window_pane *wp) > struct grid_line *gl; > unsigned long long size; > u_int i; > - u_int idx; > > size = 0; > for (i = 0; i < gd->hsize; i++) { > @@ -335,11 +334,9 @@ format_window_pane(struct format_tree *ft, struct > window_pane *wp) > } > size += gd->hsize * sizeof *gd->linedata; > > - idx = window_pane_index(wp->window, wp); > - > format_add(ft, "pane_width", "%u", wp->sx); > format_add(ft, "pane_height", "%u", wp->sy); > - format_add(ft, "pane_index", "%u", idx); > + format_add(ft, "pane_index", "%u", window_pane_index(wp)); > format_add(ft, "pane_title", "%s", wp->base.title); > format_add(ft, "history_size", "%u", gd->hsize); > format_add(ft, "history_limit", "%u", gd->hlimit); > diff --git a/trunk/screen-redraw.c b/trunk/screen-redraw.c > index a12fa36..4ff176e 100644 > --- a/trunk/screen-redraw.c > +++ b/trunk/screen-redraw.c > @@ -272,7 +272,7 @@ screen_redraw_draw_number(struct client *c, struct > window_pane *wp) > char buf[16], *ptr; > size_t len; > > - idx = window_pane_index(w, wp); > + idx = window_pane_index(wp); > len = xsnprintf(buf, sizeof buf, "%u", idx); > > if (wp->sx < len) > diff --git a/trunk/status.c b/trunk/status.c > index 1baab92..6be1b7e 100644 > --- a/trunk/status.c > +++ b/trunk/status.c > @@ -423,7 +423,7 @@ status_replace1(struct client *c, struct session *s, > struct winlink *wl, > goto do_replace; > case 'P': > xsnprintf( > - tmp, sizeof tmp, "%u", window_pane_index(wl->window, wp)); > + tmp, sizeof tmp, "%u", window_pane_index(wp)); > ptr = tmp; > goto do_replace; > case 'S': > diff --git a/trunk/tmux.h b/trunk/tmux.h > index 74add28..19b5118 100644 > --- a/trunk/tmux.h > +++ b/trunk/tmux.h > @@ -1923,7 +1923,7 @@ struct window_pane *window_pane_next_by_number(struct > window *, > struct window_pane *, u_int); > struct window_pane *window_pane_previous_by_number(struct window *, > struct window_pane *, u_int); > -u_int window_pane_index(struct window *, struct window_pane > *); > +u_int window_pane_index(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); > diff --git a/trunk/window.c b/trunk/window.c > index eb35a85..3a54ca0 100644 > --- a/trunk/window.c > +++ b/trunk/window.c > @@ -484,8 +484,9 @@ window_pane_previous_by_number(struct window *w, struct > window_pane *wp, > } > > u_int > -window_pane_index(struct window *w, struct window_pane *wp) > +window_pane_index(struct window_pane *wp) > { > + struct window *w = wp->window; > struct window_pane *wq; > u_int n; > int found; > -- > 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@Ciosco 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@Ciosco 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