Looks good aside from a few style nits I can fix before commit (use tabs not spaces, all the u_int variable declarations go in the same statement, line length needs to be <= 80 columns, new line for each new sentence in tmux.1, "lines or columns" not "lines or cells" in tmux.1).
I don't have strong feelings whether -p means % of parent cell or total size, it's up to you which you prefer. I'd add a line to the manual explaining what it means in either case. Thanks! On Mon, Oct 07, 2019 at 11:44:46PM -0700, Anindya Mukherjee wrote: > Fixed a mistake in the last upload. Sorry for the noise. > Although currently I am using the parent layout cell of the target window > pane's cell to calculate the available space, I wonder if it would be > better to use the root layout cell, which is basically the entire > terminal. An example is a 2x2 grid with 4 panes. Here if I just use the > parent cell, it only covers half of the available space and the results > are a little less intuitive compared to using the top level cell. > Best, > Anindya > > On Mon, Oct 7, 2019 at 10:42 PM Anindya Mukherjee <[email protected]> > wrote: > > Some further adjustments. I realised that checking the percentage is not > necessary because downstream code handles large values correctly. Also, > the layout type of the parent layout_cell is always LAYOUT_WINDOWPANE so > I check the args instead while calculating the adjustment (which is also > what's done in split-window). > Best, > Anindya > > On Mon, Oct 7, 2019 at 9:17 PM Anindya Mukherjee <[email protected]> > wrote: > > Hi Nicholas, > Thanks for the feedback! I have adjusted the code accordingly. > percentage can now be 0 to INT_MAX as in split-window. > Yes, initially I was setting the increment as a percentage of the > current pane size thinking that would be convenient. However, upon > trying percentage of the available space in the parent cell I prefer > that. Also it is then consistent with split-window. > Changes attached. Please have a look. > Best, > Anindya > On Mon, Oct 7, 2019 at 4:57 AM Nicholas Marriott > <[email protected]> wrote: > > Thanks for this. > > For strtonum - I think it does no harm to let people do -p0 or > -p99999999 to mean as small or as big as possible. > > With split-window, -p is a % of the available space, but you have > made > it a % of the existing size? Is this more useful? > > You should be able to get the available space by looking at the size > of > the parent cell (wp->layout_cell->parent->sx and sy). > > On Sun, Oct 06, 2019 at 03:34:33PM -0700, Anindya Mukherjee wrote: > >A A Thanks Thomas for the tips! I have adjusted the code > accordingly. > >A A Regarding the args_strtonum call: I want to disallow percent > <=0 and > > >A A 100. I thought adding 1, 100 is a convenient way of doing > that, and I get > >A A a "too small/large" error when invalid values are > supplied.AA Is there any > >A A issue with doing it this way? > >A A Best, > >A A Anindya > >A A On Sun, Oct 6, 2019 at 3:03 PM Thomas Adam > <[email protected]> wrote: > > > >A A A Hi, > > > >A A A Thanks.AA Comments below: > > > >A A A 1.AA You shouldn't need to use 0U for integer > definitions. > >A A A 2.AA In terms of calling args_strtonum() for > percentage:AA 0, INT_MAX > >A A A should be OK, rather than 1, 100, no? > >A A A 3.AA When you're resizing in either L/R or U/D, the > layout cells are > >A A A either LEFTRIGHT or TOPBOTTOM.AA Rather than embed your > percentage > >A A A check in all of the if statements that check for 'L', 'R', > etc., you > >A A A can pull this check out to the top, something like: > > > >A A A if (layout == LAYOUT_TOPBOTTOM) > >A A A AA AA adjust = (wp->sy * percentage) / 100 > >A A A else > >A A A AA AA adjust = (wp->sx * percentage) / 100 > > > >A A A I'm sure you get the idea. > > > >A A A Kindly, > >A A A Thomas > > > >A A A On Sun, 6 Oct 2019 at 20:56, Anindya Mukherjee > <[email protected]> > >A A A wrote: > >A A A > > >A A A > Hi, I have been playing with adding a percent option to > resize-pane. > >A A A It's on the todo list (small things) for tmux, and I find > it very > >A A A useful. Right now it's working for me but being new to > tmux code I would > >A A A love to have some eyes on it. I have attached my changes. > >A A A > > >A A A > If this is worthwhile/useful then I can do it properly > via github. In > >A A A that case any advice on the proper procedure is welcome! > >A A A > > >A A A > Anindya > >A A A > > >A A A > -- > >A A A > You received this message because you are subscribed to > the Google > >A A A Groups "tmux-users" group. > >A A A > To unsubscribe from this group and stop receiving emails > from it, send > >A A A an email to [email protected]. > >A A A > To view this discussion on the web, visit > >A A A > > https://groups.google.com/d/msgid/tmux-users/CAN%2Bi5iO9yh4TSNJ_r7397%2BCwW55%2BwHqDOs20CBYpFmoXeZfHTA%40mail.gmail.com. > diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c > index 8d35d96f..519c9d5e 100644 > --- a/cmd-resize-pane.c > +++ b/cmd-resize-pane.c > @@ -35,9 +35,9 @@ const struct cmd_entry cmd_resize_pane_entry = { > .name = "resize-pane", > .alias = "resizep", > > - .args = { "DLMRt:Ux:y:Z", 0, 1 }, > + .args = { "DLMp:Rt:Ux:y:Z", 0, 1 }, > .usage = "[-DLMRUZ] [-x width] [-y height] " CMD_TARGET_PANE_USAGE " " > - "[adjustment]", > + "[-p percentage] [adjustment]", > > .target = { 't', CMD_FIND_PANE, 0 }, > > @@ -57,8 +57,9 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item > *item) > struct session *s = item->target.s; > const char *errstr; > char *cause; > - u_int adjust; > + u_int adjust = 0; > int x, y; > + u_int percentage = 0; > > if (args_has(args, 'M')) { > if (cmd_mouse_window(&shared->mouse, &s) == NULL) > @@ -81,7 +82,29 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item > *item) > } > server_unzoom_window(w); > > - if (args->argc == 0) > + if (args_has(args, 'p')) { > + percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause); > + if (cause != NULL) { > + cmdq_error(item, "percentage %s", cause); > + free(cause); > + return (CMD_RETURN_ERROR); > + } > + > + /* Should not also have an adjustment in this case. */ > + if (args->argc > 0) { > + cmdq_error(item, "percentage and adjustment are > mutually exclusive"); > + return (CMD_RETURN_ERROR); > + } > + > + /* Calculate adjustment from parent cell size. */ > + if (wp->layout_cell->parent) { /* A cell filling the > terminal has no parent */ > + if (args_has(args, 'U') || args_has(args, 'D')) > + adjust = (wp->layout_cell->parent->sy * > percentage) / 100; > + else > + adjust = (wp->layout_cell->parent->sx * > percentage) / 100; > + } > + } > + else if (args->argc == 0) > adjust = 1; > else { > adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); > diff --git a/tmux.1 b/tmux.1 > index e095ba40..f548af2c 100644 > --- a/tmux.1 > +++ b/tmux.1 > @@ -2224,13 +2224,18 @@ if specified, to > .Ar new-name . > .It Xo Ic resize-pane > .Op Fl DLMRUZ > +.Op Fl p Ar percentage > .Op Fl t Ar target-pane > .Op Fl x Ar width > .Op Fl y Ar height > .Op Ar adjustment > .Xc > .D1 (alias: Ic resizep ) > -Resize a pane, up, down, left or right by > +Resize a pane, up, down, left or right by a > +.Ar percentage > +of the available space > +.Fl p > +or by > .Ar adjustment > with > .Fl U , > @@ -2246,7 +2251,11 @@ or > .Fl y . > The > .Ar adjustment > -is given in lines or cells (the default is 1). > +is given in lines or cells (the default is 1). The > +.Ar percentage > +and the > +.Ar adjustment > +are mutually exclusive. > .Pp > With > .Fl Z , -- You received this message because you are subscribed to the Google Groups "tmux-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web, visit https://groups.google.com/d/msgid/tmux-users/20191008070515.bzhi4zwiubzawx67%40yelena.
