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 < nicholas.marri...@gmail.com> 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: > > Thanks Thomas for the tips! I have adjusted the code accordingly. > > Regarding the args_strtonum call: I want to disallow percent <=0 and > > > 100. I thought adding 1, 100 is a convenient way of doing that, and I > get > > a "too small/large" error when invalid values are supplied.A Is > there any > > issue with doing it this way? > > Best, > > Anindya > > On Sun, Oct 6, 2019 at 3:03 PM Thomas Adam <tho...@xteddy.org> wrote: > > > > Hi, > > > > Thanks.A Comments below: > > > > 1.A You shouldn't need to use 0U for integer definitions. > > 2.A In terms of calling args_strtonum() for percentage:A 0, > INT_MAX > > should be OK, rather than 1, 100, no? > > 3.A When you're resizing in either L/R or U/D, the layout cells are > > either LEFTRIGHT or TOPBOTTOM.A Rather than embed your percentage > > check in all of the if statements that check for 'L', 'R', etc., you > > can pull this check out to the top, something like: > > > > if (layout == LAYOUT_TOPBOTTOM) > > A A adjust = (wp->sy * percentage) / 100 > > else > > A A adjust = (wp->sx * percentage) / 100 > > > > I'm sure you get the idea. > > > > Kindly, > > Thomas > > > > On Sun, 6 Oct 2019 at 20:56, Anindya Mukherjee <anindy...@gmail.com > > > > wrote: > > > > > > Hi, I have been playing with adding a percent option to > resize-pane. > > It's on the todo list (small things) for tmux, and I find it very > > useful. Right now it's working for me but being new to tmux code I > would > > love to have some eyes on it. I have attached my changes. > > > > > > If this is worthwhile/useful then I can do it properly via > github. In > > that case any advice on the proper procedure is welcome! > > > > > > Anindya > > > > > > -- > > > 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 tmux-users+unsubscr...@googlegroups.com. > > > To view this discussion on the web, visit > > > https://groups.google.com/d/msgid/tmux-users/CAN%2Bi5iO9yh4TSNJ_r7397%2BCwW55%2BwHqDOs20CBYpFmoXeZfHTA%40mail.gmail.com > . > -- 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 tmux-users+unsubscr...@googlegroups.com. To view this discussion on the web, visit https://groups.google.com/d/msgid/tmux-users/CAN%2Bi5iMsc1EWGAm%3Du4813ADf3O5BSO%3DegOkvL_8EeUVXrgpmTQ%40mail.gmail.com.
diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 8d35d96f..5ce4daf5 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,24 @@ 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); + } + + if (percentage > 100) + percentage = 100; + + /* 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); + } + } + else if (args->argc == 0) adjust = 1; else { adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); @@ -110,6 +128,13 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y); } + /* Calculate adjustment from parent window size. */ + if (wp->layout_cell->parent) /* A window filling the terminal has no parent */ + if(wp->layout_cell->type == LAYOUT_TOPBOTTOM) + adjust = (wp->layout_cell->parent->sy * percentage) / 100; + else + adjust = (wp->layout_cell->parent->sx * percentage) / 100; + if (args_has(args, 'L')) layout_resize_pane(wp, LAYOUT_LEFTRIGHT, -adjust, 1); else if (args_has(args, 'R')) 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 ,