resize-pane -p percent option

29 views
Skip to first unread message

Anindya Mukherjee

unread,
Oct 6, 2019, 3:56:46 PM10/6/19
to tmux-...@googlegroups.com, Nicholas Marriott
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
resize-pane-percent-diff.txt

Thomas Adam

unread,
Oct 6, 2019, 6:03:31 PM10/6/19
to Anindya Mukherjee, tmux-...@googlegroups.com, Nicholas Marriott
Hi,

Thanks. Comments below:

1. You shouldn't need to use 0U for integer definitions.
2. In terms of calling args_strtonum() for percentage: 0, INT_MAX
should be OK, rather than 1, 100, no?
3. When you're resizing in either L/R or U/D, the layout cells are
either LEFTRIGHT or TOPBOTTOM. 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)
adjust = (wp->sy * percentage) / 100
else
adjust = (wp->sx * percentage) / 100

I'm sure you get the idea.

Kindly,
Thomas
> --
> 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+...@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.

Anindya Mukherjee

unread,
Oct 6, 2019, 6:34:46 PM10/6/19
to Thomas Adam, tmux-...@googlegroups.com, Nicholas Marriott
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.  Is there any issue with doing it this way?

Best,
Anindya

Nicholas Marriott

unread,
Oct 7, 2019, 7:57:05 AM10/7/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
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

Anindya Mukherjee

unread,
Oct 8, 2019, 12:17:49 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
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
resize-pane-percent-diff.txt

Anindya Mukherjee

unread,
Oct 8, 2019, 1:42:56 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
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

resize-pane-percent-diff.txt

Anindya Mukherjee

unread,
Oct 8, 2019, 2:45:00 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
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


resize-pane-percent-diff.txt

Nicholas Marriott

unread,
Oct 8, 2019, 3:05:19 AM10/8/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
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!
> >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
> <tho...@xteddy.org> 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
> <anin...@gmail.com>
> >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 tmux-users+...@googlegroups.com.
> >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 ,

Anindya Mukherjee

unread,
Oct 8, 2019, 3:34:26 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Great, thanks!

I updated the code to use the root layout cell as that seems intuitive to me, and also tried to fix some of the formatting issues.

Best,
Anindya

resize-pane-percent-diff.txt

Nicholas Marriott

unread,
Oct 8, 2019, 4:53:27 AM10/8/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
OK this looks good but there are two things:

- if you are using the whole size you should be able to use wp->sx and
sy for the size rather than walking up to it (or you can get the root
cell directly from wp->layout_cell).

- this resizes BY a % of the total size which seems a bit odd - I was
thinking it would resize TO a % of the total size?


On Tue, Oct 08, 2019 at 12:34:13AM -0700, Anindya Mukherjee wrote:
> Great, thanks!
> I updated the code to use the root layout cell as that seems intuitive to
> me, and also tried to fix some of the formatting issues.
> Best,
> Anindya
>
> On Tue, Oct 8, 2019 at 12:05 AM Nicholas Marriott
> <nicholas...@gmail.com> wrote:
>
> 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:
> >A A Fixed a mistake in the last upload. Sorry for the noise.
> >A A Although currently I am using the parent layout cell of the
> target window
> >A A pane's cell to calculate the available space, I wonder if it
> would be
> >A A better to use the root layout cell, which is basically the entire
> >A A terminal. An example is a 2x2 grid with 4 panes. Here if I just
> use the
> >A A parent cell, it only covers half of the available space and the
> results
> >A A are a little less intuitive compared to using the top level cell.
> >A A Best,
> >A A Anindya
> >
> >A A On Mon, Oct 7, 2019 at 10:42 PM Anindya Mukherjee
> <anin...@gmail.com>
> >A A wrote:
> >
> >A A A Some further adjustments. I realised that checking the
> percentage is not
> >A A A necessary because downstream code handles large values
> correctly. Also,
> >A A A the layout type of the parent layout_cell is always
> LAYOUT_WINDOWPANE so
> >A A A I check the args instead while calculating the adjustment
> (which is also
> >A A A what's done in split-window).
> >A A A Best,
> >A A A Anindya
> >
> >A A A On Mon, Oct 7, 2019 at 9:17 PM Anindya Mukherjee
> <anin...@gmail.com>
> >A A A wrote:
> >
> >A A A A Hi Nicholas,
> >A A A A Thanks for the feedback! I have adjusted the code
> accordingly.
> >A A A A percentage can now be 0 to INT_MAX as in split-window.
> >A A A A Yes, initially I was setting the increment as a percentage
> of the
> >A A A A current pane size thinking that would be convenient.
> However, upon
> >A A A A trying percentage of the available space in the parent cell
> I prefer
> >A A A A that. Also it is then consistent with split-window.
> >A A A A Changes attached. Please have a look.
> >A A A A Best,
> >A A A A Anindya
> >A A A A On Mon, Oct 7, 2019 at 4:57 AM Nicholas Marriott
> >A A A A <nicholas...@gmail.com> wrote:
> >
> >A A A A A Thanks for this.
> >
> >A A A A A For strtonum - I think it does no harm to let people do
> -p0 or
> >A A A A A -p99999999 to mean as small or as big as possible.
> >
> >A A A A A With split-window, -p is a % of the available space, but
> you have
> >A A A A A made
> >A A A A A it a % of the existing size? Is this more useful?
> >
> >A A A A A You should be able to get the available space by looking
> at the size
> >A A A A A of
> >A A A A A the parent cell (wp->layout_cell->parent->sx and sy).
> >
> >A A A A A On Sun, Oct 06, 2019 at 03:34:33PM -0700, Anindya
> Mukherjee wrote:
> >A A A A A >AA AA Thanks Thomas for the tips! I have adjusted the
> code
> >A A A A A accordingly.
> >A A A A A >AA AA Regarding the args_strtonum call: I want to
> disallow percent
> >A A A A A <=0 and >
> >A A A A A >AA AA 100. I thought adding 1, 100 is a convenient
> way of doing
> >A A A A A that, and I get
> >A A A A A >AA AA a "too small/large" error when invalid values
> are
> >A A A A A supplied.AAA Is there any
> >A A A A A >AA AA issue with doing it this way?
> >A A A A A >AA AA Best,
> >A A A A A >AA AA Anindya
> >A A A A A >AA AA On Sun, Oct 6, 2019 at 3:03 PM Thomas Adam
> >A A A A A <tho...@xteddy.org> wrote:
> >A A A A A >
> >A A A A A >AA AA AA Hi,
> >A A A A A >
> >A A A A A >AA AA AA Thanks.AAA Comments below:
> >A A A A A >
> >A A A A A >AA AA AA 1.AAA You shouldn't need to use 0U for
> integer
> >A A A A A definitions.
> >A A A A A >AA AA AA 2.AAA In terms of calling args_strtonum()
> for
> >A A A A A percentage:AAA 0, INT_MAX
> >A A A A A >AA AA AA should be OK, rather than 1, 100, no?
> >A A A A A >AA AA AA 3.AAA When you're resizing in either L/R
> or U/D, the
> >A A A A A layout cells are
> >A A A A A >AA AA AA either LEFTRIGHT or TOPBOTTOM.AAA Rather
> than embed your
> >A A A A A percentage
> >A A A A A >AA AA AA check in all of the if statements that
> check for 'L', 'R',
> >A A A A A etc., you
> >A A A A A >AA AA AA can pull this check out to the top,
> something like:
> >A A A A A >
> >A A A A A >AA AA AA if (layout == LAYOUT_TOPBOTTOM)
> >A A A A A >AA AA AA AAA AAA adjust = (wp->sy * percentage) /
> 100
> >A A A A A >AA AA AA else
> >A A A A A >AA AA AA AAA AAA adjust = (wp->sx * percentage) /
> 100
> >A A A A A >
> >A A A A A >AA AA AA I'm sure you get the idea.
> >A A A A A >
> >A A A A A >AA AA AA Kindly,
> >A A A A A >AA AA AA Thomas
> >A A A A A >
> >A A A A A >AA AA AA On Sun, 6 Oct 2019 at 20:56, Anindya
> Mukherjee
> >A A A A A <anin...@gmail.com>
> >A A A A A >AA AA AA wrote:
> >A A A A A >AA AA AA >
> >A A A A A >AA AA AA > Hi, I have been playing with adding a
> percent option to
> >A A A A A resize-pane.
> >A A A A A >AA AA AA It's on the todo list (small things) for
> tmux, and I find
> >A A A A A it very
> >A A A A A >AA AA AA useful. Right now it's working for me but
> being new to
> >A A A A A tmux code I would
> >A A A A A >AA AA AA love to have some eyes on it. I have
> attached my changes.
> >A A A A A >AA AA AA >
> >A A A A A >AA AA AA > If this is worthwhile/useful then I can
> do it properly
> >A A A A A via github. In
> >A A A A A >AA AA AA that case any advice on the proper
> procedure is welcome!
> >A A A A A >AA AA AA >
> >A A A A A >AA AA AA > Anindya
> >A A A A A >AA AA AA >
> >A A A A A >AA AA AA > --
> >A A A A A >AA AA AA > You received this message because you are
> subscribed to
> >A A A A A the Google
> >A A A A A >AA AA AA Groups "tmux-users" group.
> >A A A A A >AA AA AA > To unsubscribe from this group and stop
> receiving emails
> >A A A A A from it, send
> >A A A A A >AA AA AA an email to
> tmux-users+...@googlegroups.com.
> >A A A A A >AA AA AA > To view this discussion on the web, visit
> >A A A A A >AA AA A
> >A A 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 = {
> >A A A A .name = "resize-pane",
> >A A A A .alias = "resizep",
> >A
> > -A A A .args = { "DLMRt:Ux:y:Z", 0, 1 },
> > +A A A .args = { "DLMp:Rt:Ux:y:Z", 0, 1 },
> >A A A A .usage = "[-DLMRUZ] [-x width] [-y height] "
> CMD_TARGET_PANE_USAGE " "
> > -A A A A A A A "[adjustment]",
> > +A A A A A A A "[-p percentage] [adjustment]",
> >A
> >A A A A .target = { 't', CMD_FIND_PANE, 0 },
> >A
> > @@ -57,8 +57,9 @@ cmd_resize_pane_exec(struct cmd *self, struct
> cmdq_item *item)
> >A A A A struct sessionA A A A A *s = item->target.s;
> >A A A A const charA A A A A A A *errstr;
> >A A A A charA A A A A A A A A A *cause;
> > -A A A u_intA A A A A A A A A A adjust;
> > +A A A u_intA A A A A A A A A A adjust = 0;
> >A A A A intA A A A A A A A A A A x, y;
> > +A A A A u_intA A A A A A A A A A percentage = 0;
> >A
> >A A A A if (args_has(args, 'M')) {
> >A A A A A A A A if (cmd_mouse_window(&shared->mouse, &s) ==
> NULL)
> > @@ -81,7 +82,29 @@ cmd_resize_pane_exec(struct cmd *self, struct
> cmdq_item *item)
> >A A A A }
> >A A A A server_unzoom_window(w);
> >A
> > -A A A if (args->argc == 0)
> > +A A A A if (args_has(args, 'p')) {
> > +A A A A A A A A percentage = args_strtonum(args, 'p', 0,
> INT_MAX, &cause);
> > +A A A A A A A if (cause != NULL) {
> > +A A A A A A A A A A A cmdq_error(item, "percentage %s",
> cause);
> > +A A A A A A A A A A A free(cause);
> > +A A A A A A A A A A A return (CMD_RETURN_ERROR);
> > +A A A A A A A }
> > +
> > +A A A A A A A A /* Should not also have an adjustment in this
> case. */
> > +A A A A A A A A if (args->argc > 0) {
> > +A A A A A A A A A A A cmdq_error(item, "percentage and
> adjustment are mutually exclusive");
> > +A A A A A A A A A A A return (CMD_RETURN_ERROR);
> > +A A A A A A A A }
> > +
> > +A A A A A A A A /* Calculate adjustment from parent cell
> size. */
> > +A A A A A A A A if (wp->layout_cell->parent) { /* A cell
> filling the terminal has no parent */
> > +A A A A A A A A A A A A if (args_has(args, 'U') ||
> args_has(args, 'D'))
> > +A A A A A A A A A A A A A A A A adjust =
> (wp->layout_cell->parent->sy * percentage) / 100;
> > +A A A A A A A A A A A A else
> > +A A A A A A A A A A A A A A A A adjust =
> (wp->layout_cell->parent->sx * percentage) / 100;
> > +A A A A A A A A }
> > +A A A A }
> > +A A A else if (args->argc == 0)
> >A A A A A A A A adjust = 1;
> >A A A A else {
> >A A A A A A A A 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
> >A .Ar new-name .
> >A .It Xo Ic resize-pane
> >A .Op Fl DLMRUZ
> > +.Op Fl p Ar percentage
> >A .Op Fl t Ar target-pane
> >A .Op Fl x Ar width
> >A .Op Fl y Ar height
> >A .Op Ar adjustment
> >A .Xc
> >A .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
> >A .Ar adjustment
> >A with
> >A .Fl U ,
> > @@ -2246,7 +2251,11 @@ or
> >A .Fl y .
> >A The
> >A .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.
> >A .Pp
> >A With
> >A .Fl Z ,

> diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c
> index 8d35d96f..eeddabf9 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 },
>
> @@ -55,9 +55,10 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
> struct window *w = wl->window;
> struct client *c = item->client;
> struct session *s = item->target.s;
> + struct layout_cell *rootlc;
> const char *errstr;
> char *cause;
> - u_int adjust;
> + u_int adjust = 0, percentage = 0;
> int x, y;
>
> if (args_has(args, 'M')) {
> @@ -81,7 +82,33 @@ 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);
> + }
> +
> + /* Find the root layout cell */
> + rootlc = wp->layout_cell;
> + while (rootlc->parent)
> + rootlc = rootlc->parent;
> +
> + /* Calculate adjustment from the root cell size. */
> + if (args_has(args, 'U') || args_has(args, 'D'))
> + adjust = (rootlc->sy * percentage) / 100;
> + else
> + adjust = (rootlc->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..41066ddc 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,12 @@ or
> .Fl y .
> The
> .Ar adjustment
> -is given in lines or cells (the default is 1).
> +is given in lines or columns (the default is 1).
> +The

Anindya Mukherjee

unread,
Oct 8, 2019, 8:34:41 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
I was thinking that "-p percent" would be a way to enter an adjustment for the "resize by" commands like LRUD. So it would "resize by".

In my 2x2 grid example when I look at the top level cell (found by walking up) its size is 244x65 (for the current terminal size), while the size of both the target wp and its layout cell is 122x32. Is there a quick way to get to the top level given the target pane?

Alternatively we can resize by a percentage of the target pane's size like I was doing initially which is also intuitive.

Best,
Anindya

Nicholas Marriott

unread,
Oct 8, 2019, 9:04:53 AM10/8/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
It seems less useful to me to be able to say "add 50% of the size of the
pane/window to the size of this cell" than to say "make this cell cover
50% of the window". But I don't really mind that much if you think it is
better.

Oh the top cell will be the size of the WINDOW not the pane, sorry. So
it will be w->layout_root or w->sx and w->sy, not wp->layout_cell.


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

Anindya Mukherjee

unread,
Oct 8, 2019, 10:36:56 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Thanks, yes using the window itself is perfect for the root size. No need to walk.

Using -p to set rather than adjust the size makes sense. In that case should we make it a part of the -x or -y commands rather than UDLR? Something like:
resize-pane -x -p 25
to resize the pane horizontally to 25% of root width (and similarly for y).

Nicholas Marriott

unread,
Oct 8, 2019, 10:41:07 AM10/8/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
Sure that makes sense.

Maybe it would be better to look for a % on the number so that you do '-x 25%' instead of -p flag?




On Tue, Oct 08, 2019 at 07:36:43AM -0700, Anindya Mukherjee wrote:
> Thanks, yes using the window itself is perfect for the root size. No need
> to walk.
> Using -p to set rather than adjust the size makes sense. In that case
> should we make it a part of the -x or -y commands rather than UDLR?
> Something like:
> resize-pane -x -p 25
> to resize the pane horizontally to 25% of root width (and similarly for
> y).
> Best,
> Anindya
>
> (PGP public key:
> http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x1C198D2DB291E1B0
> )
> On Tue, Oct 8, 2019 at 6:04 AM Nicholas Marriott
> <nicholas...@gmail.com> wrote:
>
> It seems less useful to me to be able to say "add 50% of the size of the
> pane/window to the size of this cell" than to say "make this cell cover
> 50% of the window". But I don't really mind that much if you think it is
> better.
>
> Oh the top cell will be the size of the WINDOW not the pane, sorry. So
> it will be w->layout_root or w->sx and w->sy, not wp->layout_cell.
>
> On Tue, Oct 08, 2019 at 05:34:27AM -0700, Anindya Mukherjee wrote:
> >A A I was thinking that "-p percent" would be a way to enter an
> adjustment for
> >A A the "resize by" commands like LRUD. So it would "resize by".
> >A A In my 2x2 grid example when I look at the top level cell (found
> by walking
> >A A up) its size is 244x65 (for the current terminal size), while the
> size of
> >A A both the target wp and its layout cell is 122x32. Is there a
> quick way to
> >A A get to the top level given the target pane?
> >A A Alternatively we can resize by a percentage of the target pane's
> size like
> >A A I was doing initially which is also intuitive.
> >A A Best,
> >A A Anindya
> >A A On Tue, Oct 8, 2019 at 1:53 AM Nicholas Marriott
> >A A <nicholas...@gmail.com> wrote:
> >
> >A A A OK this looks good but there are two things:
> >
> >A A A - if you are using the whole size you should be able to use
> wp->sx and
> >A A A AA sy for the size rather than walking up to it (or you can
> get the root
> >A A A AA cell directly from wp->layout_cell).
> >
> >A A A - this resizes BY a % of the total size which seems a bit odd
> - I was
> >A A A AA thinking it would resize TO a % of the total size?
> >
> >A A A On Tue, Oct 08, 2019 at 12:34:13AM -0700, Anindya Mukherjee
> wrote:
> >A A A >AA AA Great, thanks!
> >A A A >AA AA I updated the code to use the root layout cell as
> that seems
> >A A A intuitive to
> >A A A >AA AA me, and also tried to fix some of the formatting
> issues.
> >A A A >AA AA Best,
> >A A A >AA AA Anindya
> >A A A >
> >A A A >AA AA On Tue, Oct 8, 2019 at 12:05 AM Nicholas Marriott
> >A A A >AA AA <nicholas...@gmail.com> wrote:
> >A A A >
> >A A A >AA AA AA Looks good aside from a few style nits I can fix
> before commit
> >A A A (use tabs
> >A A A >AA AA AA not spaces, all the u_int variable declarations
> go in the same
> >A A A >AA AA AA statement, line length needs to be <= 80 columns,
> new line for
> >A A A each new
> >A A A >AA AA AA sentence in tmux.1, "lines or columns" not "lines
> or cells" in
> >A A A tmux.1).
> >A A A >
> >A A A >AA AA AA I don't have strong feelings whether -p means %
> of parent cell
> >A A A or total
> >A A A >AA AA AA size, it's up to you which you prefer. I'd add a
> line to the
> >A A A manual
> >A A A >AA AA AA explaining what it means in either case.
> >A A A >
> >A A A >AA AA AA Thanks!
> >A A A >
> >A A A >AA AA AA On Mon, Oct 07, 2019 at 11:44:46PM -0700, Anindya
> Mukherjee
> >A A A wrote:
> >A A A >AA AA AA >AAA AAA Fixed a mistake in the last upload.
> Sorry for the
> >A A A noise.
> >A A A >AA AA AA >AAA AAA Although currently I am using the
> parent layout cell
> >A A A of the
> >A A A >AA AA AA target window
> >A A A >AA AA AA >AAA AAA pane's cell to calculate the available
> space, I
> >A A A wonder if it
> >A A A >AA AA AA would be
> >A A A >AA AA AA >AAA AAA better to use the root layout cell,
> which is
> >A A A basically the entire
> >A A A >AA AA AA >AAA AAA terminal. An example is a 2x2 grid
> with 4 panes. Here
> >A A A if I just
> >A A A >AA AA AA use the
> >A A A >AA AA AA >AAA AAA parent cell, it only covers half of
> the available
> >A A A space and the
> >A A A >AA AA AA results
> >A A A >AA AA AA >AAA AAA are a little less intuitive compared
> to using the top
> >A A A level cell.
> >A A A >AA AA AA >AAA AAA Best,
> >A A A >AA AA AA >AAA AAA Anindya
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA On Mon, Oct 7, 2019 at 10:42 PM
> Anindya Mukherjee
> >A A A >AA AA AA <anin...@gmail.com>
> >A A A >AA AA AA >AAA AAA wrote:
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA Some further adjustments. I
> realised that
> >A A A checking the
> >A A A >AA AA AA percentage is not
> >A A A >AA AA AA >AAA AAA AAA necessary because downstream code
> handles large
> >A A A values
> >A A A >AA AA AA correctly. Also,
> >A A A >AA AA AA >AAA AAA AAA the layout type of the parent
> layout_cell is
> >A A A always
> >A A A >AA AA AA LAYOUT_WINDOWPANE so
> >A A A >AA AA AA >AAA AAA AAA I check the args instead while
> calculating the
> >A A A adjustment
> >A A A >AA AA AA (which is also
> >A A A >AA AA AA >AAA AAA AAA what's done in split-window).
> >A A A >AA AA AA >AAA AAA AAA Best,
> >A A A >AA AA AA >AAA AAA AAA Anindya
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA On Mon, Oct 7, 2019 at 9:17 PM
> Anindya Mukherjee
> >A A A >AA AA AA <anin...@gmail.com>
> >A A A >AA AA AA >AAA AAA AAA wrote:
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA AAA Hi Nicholas,
> >A A A >AA AA AA >AAA AAA AAA AAA Thanks for the feedback! I
> have adjusted the
> >A A A code
> >A A A >AA AA AA accordingly.
> >A A A >AA AA AA >AAA AAA AAA AAA percentage can now be 0 to
> INT_MAX as in
> >A A A split-window.
> >A A A >AA AA AA >AAA AAA AAA AAA Yes, initially I was setting
> the increment as
> >A A A a percentage
> >A A A >AA AA AA of the
> >A A A >AA AA AA >AAA AAA AAA AAA current pane size thinking
> that would be
> >A A A convenient.
> >A A A >AA AA AA However, upon
> >A A A >AA AA AA >AAA AAA AAA AAA trying percentage of the
> available space in
> >A A A the parent cell
> >A A A >AA AA AA I prefer
> >A A A >AA AA AA >AAA AAA AAA AAA that. Also it is then
> consistent with
> >A A A split-window.
> >A A A >AA AA AA >AAA AAA AAA AAA Changes attached. Please
> have a look.
> >A A A >AA AA AA >AAA AAA AAA AAA Best,
> >A A A >AA AA AA >AAA AAA AAA AAA Anindya
> >A A A >AA AA AA >AAA AAA AAA AAA On Mon, Oct 7, 2019 at 4:57
> AM Nicholas
> >A A A Marriott
> >A A A >AA AA AA >AAA AAA AAA AAA
> <nicholas...@gmail.com> wrote:
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA Thanks for this.
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA For strtonum - I think
> it does no harm to
> >A A A let people do
> >A A A >AA AA AA -p0 or
> >A A A >AA AA AA >AAA AAA AAA AAA AAA -p99999999 to mean as
> small or as big as
> >A A A possible.
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA With split-window, -p
> is a % of the
> >A A A available space, but
> >A A A >AA AA AA you have
> >A A A >AA AA AA >AAA AAA AAA AAA AAA made
> >A A A >AA AA AA >AAA AAA AAA AAA AAA it a % of the existing
> size? Is this more
> >A A A useful?
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA You should be able to
> get the available
> >A A A space by looking
> >A A A >AA AA AA at the size
> >A A A >AA AA AA >AAA AAA AAA AAA AAA of
> >A A A >AA AA AA >AAA AAA AAA AAA AAA the parent cell
> >A A A (wp->layout_cell->parent->sx and sy).
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA On Sun, Oct 06, 2019 at
> 03:34:33PM -0700,
> >A A A Anindya
> >A A A >AA AA AA Mukherjee wrote:
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA Thanks
> Thomas for the tips! I
> >A A A have adjusted the
> >A A A >AA AA AA code
> >A A A >AA AA AA >AAA AAA AAA AAA AAA accordingly.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA Regarding
> the args_strtonum
> >A A A call: I want to
> >A A A >AA AA AA disallow percent
> >A A A >AA AA AA >AAA AAA AAA AAA AAA <=0 and >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA 100. I
> thought adding 1, 100
> >A A A is a convenient
> >A A A >AA AA AA way of doing
> >A A A >AA AA AA >AAA AAA AAA AAA AAA that, and I get
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA a "too
> small/large" error when
> >A A A invalid values
> >A A A >AA AA AA are
> >A A A >AA AA AA >AAA AAA AAA AAA AAA supplied.AAAAA Is
> there any
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA issue with
> doing it this way?
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA Best,
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA Anindya
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA On Sun,
> Oct 6, 2019 at 3:03 PM
> >A A A Thomas Adam
> >A A A >AA AA AA >AAA AAA AAA AAA AAA <tho...@xteddy.org>
> wrote:
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA Hi,
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> Thanks.AAAAA Comments
> >A A A below:
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> 1.AAAAA You shouldn't
> >A A A need to use 0U for
> >A A A >AA AA AA integer
> >A A A >AA AA AA >AAA AAA AAA AAA AAA definitions.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> 2.AAAAA In terms of
> >A A A calling args_strtonum()
> >A A A >AA AA AA for
> >A A A >AA AA AA >AAA AAA AAA AAA AAA percentage:AAAAA 0,
> INT_MAX
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> should be OK, rather than
> >A A A 1, 100, no?
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> 3.AAAAA When you're
> >A A A resizing in either L/R
> >A A A >AA AA AA or U/D, the
> >A A A >AA AA AA >AAA AAA AAA AAA AAA layout cells are
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> either LEFTRIGHT or
> >A A A TOPBOTTOM.AAAAA Rather
> >A A A >AA AA AA than embed your
> >A A A >AA AA AA >AAA AAA AAA AAA AAA percentage
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> check in all of the if
> >A A A statements that
> >A A A >AA AA AA check for 'L', 'R',
> >A A A >AA AA AA >AAA AAA AAA AAA AAA etc., you
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA can
> pull this check out
> >A A A to the top,
> >A A A >AA AA AA something like:
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA if
> (layout ==
> >A A A LAYOUT_TOPBOTTOM)
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> AAAAA AAAAA adjust =
> >A A A (wp->sy * percentage) /
> >A A A >AA AA AA 100
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA else
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> AAAAA AAAAA adjust =
> >A A A (wp->sx * percentage) /
> >A A A >AA AA AA 100
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA I'm
> sure you get the
> >A A A idea.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> Kindly,
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> Thomas
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA On
> Sun, 6 Oct 2019 at
> >A A A 20:56, Anindya
> >A A A >AA AA AA Mukherjee
> >A A A >AA AA AA >AAA AAA AAA AAA AAA <anin...@gmail.com>
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> wrote:
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> Hi, I have been playing
> >A A A with adding a
> >A A A >AA AA AA percent option to
> >A A A >AA AA AA >AAA AAA AAA AAA AAA resize-pane.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA It's
> on the todo list
> >A A A (small things) for
> >A A A >AA AA AA tmux, and I find
> >A A A >AA AA AA >AAA AAA AAA AAA AAA it very
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> useful. Right now it's
> >A A A working for me but
> >A A A >AA AA AA being new to
> >A A A >AA AA AA >AAA AAA AAA AAA AAA tmux code I would
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA love
> to have some eyes on
> >A A A it. I have
> >A A A >AA AA AA attached my changes.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA > If
> this is
> >A A A worthwhile/useful then I can
> >A A A >AA AA AA do it properly
> >A A A >AA AA AA >AAA AAA AAA AAA AAA via github. In
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA that
> case any advice on
> >A A A the proper
> >A A A >AA AA AA procedure is welcome!
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> Anindya
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA > --
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA >
> You received this
> >A A A message because you are
> >A A A >AA AA AA subscribed to
> >A A A >AA AA AA >AAA AAA AAA AAA AAA the Google
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA
> Groups "tmux-users"
> >A A A group.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA > To
> unsubscribe from
> >A A A this group and stop
> >A A A >AA AA AA receiving emails
> >A A A >AA AA AA >AAA AAA AAA AAA AAA from it, send
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA an
> email to
> >A A A >AA AA AA tmux-users+...@googlegroups.com.
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA AAAA > To
> view this discussion
> >A A A on the web, visit
> >A A A >AA AA AA >AAA AAA AAA AAA AAA >AAAA AAAA A
> >A A A >AA AA AA >AAA AAA AAA AAA A
> >A A A >AA AA A
> >A A A
> >A A A >AA AA AA > diff --git a/cmd-resize-pane.c
> b/cmd-resize-pane.c
> >A A A >AA AA AA > index 8d35d96f..519c9d5e 100644
> >A A A >AA AA AA > --- a/cmd-resize-pane.c
> >A A A >AA AA AA > +++ b/cmd-resize-pane.c
> >A A A >AA AA AA > @@ -35,9 +35,9 @@ const struct cmd_entry
> >A A A cmd_resize_pane_entry = {
> >A A A >AA AA AA >AAA AAA AAA A .name = "resize-pane",
> >A A A >AA AA AA >AAA AAA AAA A .alias = "resizep",
> >A A A >AA AA AA >A
> >A A A >AA AA AA > -AAA AAA A .args = { "DLMRt:Ux:y:Z", 0, 1 },
> >A A A >AA AA AA > +AAA AAA A .args = { "DLMp:Rt:Ux:y:Z", 0, 1
> },
> >A A A >AA AA AA >AAA AAA AAA A .usage = "[-DLMRUZ] [-x width]
> [-y height] "
> >A A A >AA AA AA CMD_TARGET_PANE_USAGE " "
> >A A A >AA AA AA > -AAA AAA AAA AAA AAA AAA AAA
> "[adjustment]",
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA "[-p
> percentage] [adjustment]",
> >A A A >AA AA AA >A
> >A A A >AA AA AA >AAA AAA AAA A .target = { 't', CMD_FIND_PANE,
> 0 },
> >A A A >AA AA AA >A
> >A A A >AA AA AA > @@ -57,8 +57,9 @@ cmd_resize_pane_exec(struct
> cmd *self,
> >A A A struct
> >A A A >AA AA AA cmdq_item *item)
> >A A A >AA AA AA >AAA AAA AAA A struct sessionAAA AAA AAA
> AAA AAA *s =
> >A A A item->target.s;
> >A A A >AA AA AA >AAA AAA AAA A const charAAA AAA AAA AAA
> AAA AAA AAA *errstr;
> >A A A >AA AA AA >AAA AAA AAA A charAAA AAA AAA AAA AAA
> AAA AAA AAA AAA AA
> >A A A *cause;
> >A A A >AA AA AA > -AAA AAA A u_intAAA AAA AAA AAA AAA AAA
> AAA AAA AAA AA
> >A A A adjust;
> >A A A >AA AA AA > +AAA AAA A u_intAAA AAA AAA AAA AAA AAA
> AAA AAA AAA AA
> >A A A adjust = 0;
> >A A A >AA AA AA >AAA AAA AAA A intAAA AAA AAA AAA AAA
> AAA AAA AAA AAA AAA AA
> >A A A x, y;
> >A A A >AA AA AA > +AAA AAA AAA AAA u_intAAA AAA AAA AAA
> AAA AAA AAA AAA AA
> >A A A AAA percentage = 0;
> >A A A >AA AA AA >A
> >A A A >AA AA AA >AAA AAA AAA A if (args_has(args, 'M')) {
> >A A A >AA AA AA >AAA AAA AAA AAA AAA AAA AAA A if
> >A A A (cmd_mouse_window(&shared->mouse, &s) ==
> >A A A >AA AA AA NULL)
> >A A A >AA AA AA > @@ -81,7 +82,29 @@ cmd_resize_pane_exec(struct
> cmd *self,
> >A A A struct
> >A A A >AA AA AA cmdq_item *item)
> >A A A >AA AA AA >AAA AAA AAA A }
> >A A A >AA AA AA >AAA AAA AAA A server_unzoom_window(w);
> >A A A >AA AA AA >A
> >A A A >AA AA AA > -AAA AAA A if (args->argc == 0)
> >A A A >AA AA AA > +AAA AAA AAA AAA if (args_has(args, 'p')) {
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA
> percentage =
> >A A A args_strtonum(args, 'p', 0,
> >A A A >AA AA AA INT_MAX, &cause);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A if (cause !=
> NULL) {
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A cmdq_error(item,
> >A A A "percentage %s",
> >A A A >AA AA AA cause);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A free(cause);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A return
> >A A A (CMD_RETURN_ERROR);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A }
> >A A A >AA AA AA > +
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA /*
> Should not also have an
> >A A A adjustment in this
> >A A A >AA AA AA case. */
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA if
> (args->argc > 0) {
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A cmdq_error(item,
> >A A A "percentage and
> >A A A >AA AA AA adjustment are mutually exclusive");
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A return
> >A A A (CMD_RETURN_ERROR);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA }
> >A A A >AA AA AA > +
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA /*
> Calculate adjustment
> >A A A from parent cell
> >A A A >AA AA AA size. */
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA if
> >A A A (wp->layout_cell->parent) { /* A cell
> >A A A >AA AA AA filling the terminal has no parent */
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA AAA AAA if
> >A A A (args_has(args, 'U') ||
> >A A A >AA AA AA args_has(args, 'D'))
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA AAA AAA AAA AAA AA
> >A A A AAA adjust =
> >A A A >AA AA AA (wp->layout_cell->parent->sy * percentage) / 100;
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA AAA AAA else
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA AAA AAA AAA AAA AA
> >A A A AAA adjust =
> >A A A >AA AA AA (wp->layout_cell->parent->sx * percentage) / 100;
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA }
> >A A A >AA AA AA > +AAA AAA AAA AAA }
> >A A A >AA AA AA > +AAA AAA A else if (args->argc == 0)
> >A A A >AA AA AA >AAA AAA AAA AAA AAA AAA AAA A adjust = 1;
> >A A A >AA AA AA >AAA AAA AAA A else {
> >A A A >AA AA AA >AAA AAA AAA AAA AAA AAA AAA A adjust =
> >A A A strtonum(args->argv[0], 1, INT_MAX,
> >A A A >AA AA AA &errstr);
> >A A A >AA AA AA > diff --git a/tmux.1 b/tmux.1
> >A A A >AA AA AA > index e095ba40..f548af2c 100644
> >A A A >AA AA AA > --- a/tmux.1
> >A A A >AA AA AA > +++ b/tmux.1
> >A A A >AA AA AA > @@ -2224,13 +2224,18 @@ if specified, to
> >A A A >AA AA AA >AAA .Ar new-name .
> >A A A >AA AA AA >AAA .It Xo Ic resize-pane
> >A A A >AA AA AA >AAA .Op Fl DLMRUZ
> >A A A >AA AA AA > +.Op Fl p Ar percentage
> >A A A >AA AA AA >AAA .Op Fl t Ar target-pane
> >A A A >AA AA AA >AAA .Op Fl x Ar width
> >A A A >AA AA AA >AAA .Op Fl y Ar height
> >A A A >AA AA AA >AAA .Op Ar adjustment
> >A A A >AA AA AA >AAA .Xc
> >A A A >AA AA AA >AAA .D1 (alias: Ic resizep )
> >A A A >AA AA AA > -Resize a pane, up, down, left or right by
> >A A A >AA AA AA > +Resize a pane, up, down, left or right by a
> >A A A >AA AA AA > +.Ar percentage
> >A A A >AA AA AA > +of the available space
> >A A A >AA AA AA > +.Fl p
> >A A A >AA AA AA > +or by
> >A A A >AA AA AA >AAA .Ar adjustment
> >A A A >AA AA AA >AAA with
> >A A A >AA AA AA >AAA .Fl U ,
> >A A A >AA AA AA > @@ -2246,7 +2251,11 @@ or
> >A A A >AA AA AA >AAA .Fl y .
> >A A A >AA AA AA >AAA The
> >A A A >AA AA AA >AAA .Ar adjustment
> >A A A >AA AA AA > -is given in lines or cells (the default is 1).
> >A A A >AA AA AA > +is given in lines or cells (the default is 1).
> The
> >A A A >AA AA AA > +.Ar percentage
> >A A A >AA AA AA > +and the
> >A A A >AA AA AA > +.Ar adjustment
> >A A A >AA AA AA > +are mutually exclusive.
> >A A A >AA AA AA >AAA .Pp
> >A A A >AA AA AA >AAA With
> >A A A >AA AA AA >AAA .Fl Z ,
> >
> >A A A > diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c
> >A A A > index 8d35d96f..eeddabf9 100644
> >A A A > --- a/cmd-resize-pane.c
> >A A A > +++ b/cmd-resize-pane.c
> >A A A > @@ -35,9 +35,9 @@ const struct cmd_entry
> cmd_resize_pane_entry = {
> >A A A >AA AA AA A .name = "resize-pane",
> >A A A >AA AA AA A .alias = "resizep",
> >A A A >A
> >A A A > -AA AA A .args = { "DLMRt:Ux:y:Z", 0, 1 },
> >A A A > +AA AA A .args = { "DLMp:Rt:Ux:y:Z", 0, 1 },
> >A A A >AA AA AA A .usage = "[-DLMRUZ] [-x width] [-y height] "
> >A A A CMD_TARGET_PANE_USAGE " "
> >A A A > -AA AA AA AA AA AA AA "[adjustment]",
> >A A A > +AA AA AA AA AA AA AA "[-p percentage] [adjustment]",
> >A A A >A
> >A A A >AA AA AA A .target = { 't', CMD_FIND_PANE, 0 },
> >A A A >A
> >A A A > @@ -55,9 +55,10 @@ cmd_resize_pane_exec(struct cmd *self,
> struct
> >A A A cmdq_item *item)
> >A A A >AA AA AA A struct windowAA AA AA AA AA A *w =
> wl->window;
> >A A A >AA AA AA A struct clientAA AA AA AA AA A *c =
> item->client;
> >A A A >AA AA AA A struct sessionAA AA AA AA AA *s =
> item->target.s;
> >A A A > +AA AA A struct layout_cellAA AA AA *rootlc;
> >A A A >AA AA AA A const charAA AA AA AA AA AA AA *errstr;
> >A A A >AA AA AA A charAA AA AA AA AA AA AA AA AA AA
> *cause;
> >A A A > -AA AA A u_intAA AA AA AA AA AA AA AA AA AA
> adjust;
> >A A A > +AA AA A u_intAA AA AA AA AA AA AA AA AA AA
> adjust = 0, percentage =
> >A A A 0;
> >A A A >AA AA AA A intAA AA AA AA AA AA AA AA AA AA AA
> x, y;
> >A A A >A
> >A A A >AA AA AA A if (args_has(args, 'M')) {
> >A A A > @@ -81,7 +82,33 @@ cmd_resize_pane_exec(struct cmd *self,
> struct
> >A A A cmdq_item *item)
> >A A A >AA AA AA A }
> >A A A >AA AA AA A server_unzoom_window(w);
> >A A A >A
> >A A A > -AA AA A if (args->argc == 0)
> >A A A > +AA AA A if (args_has(args, 'p')) {
> >A A A > +AA AA AA AA AA AA A percentage = args_strtonum(args,
> 'p', 0, INT_MAX,
> >A A A &cause);
> >A A A > +AA AA AA AA AA AA A if (cause != NULL) {
> >A A A > +AA AA AA AA AA AA AA AA AA AA A cmdq_error(item,
> "percentage %s",
> >A A A cause);
> >A A A > +AA AA AA AA AA AA AA AA AA AA A free(cause);
> >A A A > +AA AA AA AA AA AA AA AA AA AA A return
> (CMD_RETURN_ERROR);
> >A A A > +AA AA AA AA AA AA A }
> >A A A > +
> >A A A > +AA AA AA AA AA AA A /* Should not also have an
> adjustment in this
> >A A A case. */
> >A A A > +AA AA AA AA AA AA A if (args->argc > 0) {
> >A A A > +AA AA AA AA AA AA AA AA AA AA A cmdq_error(item,
> "percentage and
> >A A A adjustment "
> >A A A > +AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA
> AA AA AA A "are mutually
> >A A A exclusive");
> >A A A > +AA AA AA AA AA AA AA AA AA AA A return
> (CMD_RETURN_ERROR);
> >A A A > +AA AA AA AA AA AA A }
> >A A A > +
> >A A A > +AA AA AA AA AA AA A /* Find the root layout cell */
> >A A A > +AA AA AA AA AA AA A rootlc = wp->layout_cell;
> >A A A > +AA AA AA AA AA AA A while (rootlc->parent)
> >A A A > +AA AA AA AA AA AA AA AA AA AA A rootlc =
> rootlc->parent;
> >A A A > +
> >A A A > +AA AA AA AA AA AA A /* Calculate adjustment from the
> root cell size.
> >A A A */
> >A A A > +AA AA AA AA AA AA A if (args_has(args, 'U') ||
> args_has(args, 'D'))
> >A A A > +AA AA AA AA AA AA AA AA AA AA A adjust =
> (rootlc->sy * percentage) /
> >A A A 100;
> >A A A > +AA AA AA AA AA AA A else
> >A A A > +AA AA AA AA AA AA AA AA AA AA A adjust =
> (rootlc->sx * percentage) /
> >A A A 100;
> >A A A > +AA AA A }
> >A A A > +AA AA A else if (args->argc == 0)
> >A A A >AA AA AA AA AA AA AA A adjust = 1;
> >A A A >AA AA AA A else {
> >A A A >AA AA AA AA AA AA AA A adjust =
> strtonum(args->argv[0], 1, INT_MAX,
> >A A A &errstr);
> >A A A > diff --git a/tmux.1 b/tmux.1
> >A A A > index e095ba40..41066ddc 100644
> >A A A > --- a/tmux.1
> >A A A > +++ b/tmux.1
> >A A A > @@ -2224,13 +2224,18 @@ if specified, to
> >A A A >AA .Ar new-name .
> >A A A >AA .It Xo Ic resize-pane
> >A A A >AA .Op Fl DLMRUZ
> >A A A > +.Op Fl p Ar percentage
> >A A A >AA .Op Fl t Ar target-pane
> >A A A >AA .Op Fl x Ar width
> >A A A >AA .Op Fl y Ar height
> >A A A >AA .Op Ar adjustment
> >A A A >AA .Xc
> >A A A >AA .D1 (alias: Ic resizep )
> >A A A > -Resize a pane, up, down, left or right by
> >A A A > +Resize a pane, up, down, left or right by a
> >A A A > +.Ar percentage
> >A A A > +of the available space
> >A A A > +.Fl p
> >A A A > +or by
> >A A A >AA .Ar adjustment
> >A A A >AA with
> >A A A >AA .Fl U ,
> >A A A > @@ -2246,7 +2251,12 @@ or
> >A A A >AA .Fl y .
> >A A A >AA The
> >A A A >AA .Ar adjustment
> >A A A > -is given in lines or cells (the default is 1).
> >A A A > +is given in lines or columns (the default is 1).
> >A A A > +The

Anindya Mukherjee

unread,
Oct 8, 2019, 11:14:39 AM10/8/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Thanks sounds perfect.

Best,
Anindya

Anindya Mukherjee

unread,
Oct 9, 2019, 3:11:12 AM10/9/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Hi, the current version does what we discussed.

Best,
Anindya

resize-pane-percent-diff.txt

Nicholas Marriott

unread,
Oct 9, 2019, 3:47:54 AM10/9/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
Looks great. OpenBSD is currently approaching lock so I don't want to
add new features but I will apply this after the tree unlocks, then it
will be in tmux 3.1.

If you want something else to do it would be nice if split-window -l
also accepted 10% (ie -l 10% was equivalent to -p 10) :-).

Thanks!


On Wed, Oct 09, 2019 at 12:10:57AM -0700, Anindya Mukherjee wrote:
> Hi, the current version does what we discussed.
> Best,
> Anindya
> On Tue, Oct 8, 2019 at 8:14 AM Anindya Mukherjee <anin...@gmail.com>
> wrote:
>
> Thanks sounds perfect.
> Best,
> Anindya
> On Tue, Oct 8, 2019 at 7:41 AM Nicholas Marriott
> <nicholas...@gmail.com> wrote:
>
> Sure that makes sense.
>
> Maybe it would be better to look for a % on the number so that you do
> '-x 25%' instead of -p flag?
>
> On Tue, Oct 08, 2019 at 07:36:43AM -0700, Anindya Mukherjee wrote:
> >A A Thanks, yes using the window itself is perfect for the root
> size. No need
> >A A to walk.
> >A A Using -p to set rather than adjust the size makes sense. In
> that case
> >A A should we make it a part of the -x or -y commands rather than
> UDLR?
> >A A Something like:
> >A A resize-pane -x -p 25
> >A A to resize the pane horizontally to 25% of root width (and
> similarly for
> >A A y).
> >A A Best,
> >A A Anindya
> >
> >A A (PGP public key:
> >A A
> http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x1C198D2DB291E1B0
> >A A )
> >A A On Tue, Oct 8, 2019 at 6:04 AM Nicholas Marriott
> >A A <nicholas...@gmail.com> wrote:
> >
> >A A A It seems less useful to me to be able to say "add 50% of the
> size of the
> >A A A pane/window to the size of this cell" than to say "make this
> cell cover
> >A A A 50% of the window". But I don't really mind that much if you
> think it is
> >A A A better.
> >
> >A A A Oh the top cell will be the size of the WINDOW not the pane,
> sorry. So
> >A A A it will be w->layout_root or w->sx and w->sy, not
> wp->layout_cell.
> >
> >A A A On Tue, Oct 08, 2019 at 05:34:27AM -0700, Anindya Mukherjee
> wrote:
> >A A A >AA AA I was thinking that "-p percent" would be a way to
> enter an
> >A A A adjustment for
> >A A A >AA AA the "resize by" commands like LRUD. So it would
> "resize by".
> >A A A >AA AA In my 2x2 grid example when I look at the top level
> cell (found
> >A A A by walking
> >A A A >AA AA up) its size is 244x65 (for the current terminal
> size), while the
> >A A A size of
> >A A A >AA AA both the target wp and its layout cell is 122x32.
> Is there a
> >A A A quick way to
> >A A A >AA AA get to the top level given the target pane?
> >A A A >AA AA Alternatively we can resize by a percentage of the
> target pane's
> >A A A size like
> >A A A >AA AA I was doing initially which is also intuitive.
> >A A A >AA AA Best,
> >A A A >AA AA Anindya
> >A A A >AA AA On Tue, Oct 8, 2019 at 1:53 AM Nicholas Marriott
> >A A A >AA AA <nicholas...@gmail.com> wrote:
> >A A A >
> >A A A >AA AA AA OK this looks good but there are two things:
> >A A A >
> >A A A >AA AA AA - if you are using the whole size you should be
> able to use
> >A A A wp->sx and
> >A A A >AA AA AA AAA sy for the size rather than walking up to
> it (or you can
> >A A A get the root
> >A A A >AA AA AA AAA cell directly from wp->layout_cell).
> >A A A >
> >A A A >AA AA AA - this resizes BY a % of the total size which
> seems a bit odd
> >A A A - I was
> >A A A >AA AA AA AAA thinking it would resize TO a % of the
> total size?
> >A A A >
> >A A A >AA AA AA On Tue, Oct 08, 2019 at 12:34:13AM -0700,
> Anindya Mukherjee
> >A A A wrote:
> >A A A >AA AA AA >AAA AAA Great, thanks!
> >A A A >AA AA AA >AAA AAA I updated the code to use the root
> layout cell as
> >A A A that seems
> >A A A >AA AA AA intuitive to
> >A A A >AA AA AA >AAA AAA me, and also tried to fix some of
> the formatting
> >A A A issues.
> >A A A >AA AA AA >AAA AAA Best,
> >A A A >AA AA AA >AAA AAA Anindya
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA On Tue, Oct 8, 2019 at 12:05 AM
> Nicholas Marriott
> >A A A >AA AA AA >AAA AAA <nicholas...@gmail.com> wrote:
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA Looks good aside from a few
> style nits I can fix
> >A A A before commit
> >A A A >AA AA AA (use tabs
> >A A A >AA AA AA >AAA AAA AAA not spaces, all the u_int
> variable declarations
> >A A A go in the same
> >A A A >AA AA AA >AAA AAA AAA statement, line length needs to
> be <= 80 columns,
> >A A A new line for
> >A A A >AA AA AA each new
> >A A A >AA AA AA >AAA AAA AAA sentence in tmux.1, "lines or
> columns" not "lines
> >A A A or cells" in
> >A A A >AA AA AA tmux.1).
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA I don't have strong feelings
> whether -p means %
> >A A A of parent cell
> >A A A >AA AA AA or total
> >A A A >AA AA AA >AAA AAA AAA size, it's up to you which you
> prefer. I'd add a
> >A A A line to the
> >A A A >AA AA AA manual
> >A A A >AA AA AA >AAA AAA AAA explaining what it means in
> either case.
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA Thanks!
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA On Mon, Oct 07, 2019 at
> 11:44:46PM -0700, Anindya
> >A A A Mukherjee
> >A A A >AA AA AA wrote:
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA Fixed a mistake in
> the last upload.
> >A A A Sorry for the
> >A A A >AA AA AA noise.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA Although currently
> I am using the
> >A A A parent layout cell
> >A A A >AA AA AA of the
> >A A A >AA AA AA >AAA AAA AAA target window
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA pane's cell to
> calculate the available
> >A A A space, I
> >A A A >AA AA AA wonder if it
> >A A A >AA AA AA >AAA AAA AAA would be
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA better to use the
> root layout cell,
> >A A A which is
> >A A A >AA AA AA basically the entire
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA terminal. An
> example is a 2x2 grid
> >A A A with 4 panes. Here
> >A A A >AA AA AA if I just
> >A A A >AA AA AA >AAA AAA AAA use the
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA parent cell, it
> only covers half of
> >A A A the available
> >A A A >AA AA AA space and the
> >A A A >AA AA AA >AAA AAA AAA results
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA are a little less
> intuitive compared
> >A A A to using the top
> >A A A >AA AA AA level cell.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA Best,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA Anindya
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA On Mon, Oct 7,
> 2019 at 10:42 PM
> >A A A Anindya Mukherjee
> >A A A >AA AA AA >AAA AAA AAA <anin...@gmail.com>
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA wrote:
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA Some further
> adjustments. I
> >A A A realised that
> >A A A >AA AA AA checking the
> >A A A >AA AA AA >AAA AAA AAA percentage is not
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA necessary
> because downstream code
> >A A A handles large
> >A A A >AA AA AA values
> >A A A >AA AA AA >AAA AAA AAA correctly. Also,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA the layout
> type of the parent
> >A A A layout_cell is
> >A A A >AA AA AA always
> >A A A >AA AA AA >AAA AAA AAA LAYOUT_WINDOWPANE so
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA I check the
> args instead while
> >A A A calculating the
> >A A A >AA AA AA adjustment
> >A A A >AA AA AA >AAA AAA AAA (which is also
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA what's done
> in split-window).
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA Best,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA Anindya
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA On Mon, Oct
> 7, 2019 at 9:17 PM
> >A A A Anindya Mukherjee
> >A A A >AA AA AA >AAA AAA AAA <anin...@gmail.com>
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA wrote:
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA Hi
> Nicholas,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA Thanks
> for the feedback! I
> >A A A have adjusted the
> >A A A >AA AA AA code
> >A A A >AA AA AA >AAA AAA AAA accordingly.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA
> percentage can now be 0 to
> >A A A INT_MAX as in
> >A A A >AA AA AA split-window.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA Yes,
> initially I was setting
> >A A A the increment as
> >A A A >AA AA AA a percentage
> >A A A >AA AA AA >AAA AAA AAA of the
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA
> current pane size thinking
> >A A A that would be
> >A A A >AA AA AA convenient.
> >A A A >AA AA AA >AAA AAA AAA However, upon
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA trying
> percentage of the
> >A A A available space in
> >A A A >AA AA AA the parent cell
> >A A A >AA AA AA >AAA AAA AAA I prefer
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA that.
> Also it is then
> >A A A consistent with
> >A A A >AA AA AA split-window.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA
> Changes attached. Please
> >A A A have a look.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA Best,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA
> Anindya
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA On
> Mon, Oct 7, 2019 at 4:57
> >A A A AM Nicholas
> >A A A >AA AA AA Marriott
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAA
> >A A A <nicholas...@gmail.com> wrote:
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> Thanks for this.
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> For strtonum - I think
> >A A A it does no harm to
> >A A A >AA AA AA let people do
> >A A A >AA AA AA >AAA AAA AAA -p0 or
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> -p99999999 to mean as
> >A A A small or as big as
> >A A A >AA AA AA possible.
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> With split-window, -p
> >A A A is a % of the
> >A A A >AA AA AA available space, but
> >A A A >AA AA AA >AAA AAA AAA you have
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> made
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> it a % of the existing
> >A A A size? Is this more
> >A A A >AA AA AA useful?
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> You should be able to
> >A A A get the available
> >A A A >AA AA AA space by looking
> >A A A >AA AA AA >AAA AAA AAA at the size
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> of
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> the parent cell
> >A A A >AA AA AA (wp->layout_cell->parent->sx and sy).
> >A A A >AA AA AA >AAA AAA AAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> On Sun, Oct 06, 2019 at
> >A A A 03:34:33PM -0700,
> >A A A >AA AA AA Anindya
> >A A A >AA AA AA >AAA AAA AAA Mukherjee wrote:
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA Thanks
> >A A A Thomas for the tips! I
> >A A A >AA AA AA have adjusted the
> >A A A >AA AA AA >AAA AAA AAA code
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> accordingly.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA Regarding
> >A A A the args_strtonum
> >A A A >AA AA AA call: I want to
> >A A A >AA AA AA >AAA AAA AAA disallow percent
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> <=0 and >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA 100. I
> >A A A thought adding 1, 100
> >A A A >AA AA AA is a convenient
> >A A A >AA AA AA >AAA AAA AAA way of doing
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> that, and I get
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA a "too
> >A A A small/large" error when
> >A A A >AA AA AA invalid values
> >A A A >AA AA AA >AAA AAA AAA are
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> supplied.AAAAAA Is
> >A A A there any
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA issue with
> >A A A doing it this way?
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA Best,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA Anindya
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA On Sun,
> >A A A Oct 6, 2019 at 3:03 PM
> >A A A >AA AA AA Thomas Adam
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> <tho...@xteddy.org>
> >A A A wrote:
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA Hi,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A Thanks.AAAAAA Comments
> >A A A >AA AA AA below:
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A 1.AAAAAA You shouldn't
> >A A A >AA AA AA need to use 0U for
> >A A A >AA AA AA >AAA AAA AAA integer
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> definitions.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A 2.AAAAAA In terms of
> >A A A >AA AA AA calling args_strtonum()
> >A A A >AA AA AA >AAA AAA AAA for
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> percentage:AAAAAA 0,
> >A A A INT_MAX
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A should be OK, rather than
> >A A A >AA AA AA 1, 100, no?
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A 3.AAAAAA When you're
> >A A A >AA AA AA resizing in either L/R
> >A A A >AA AA AA >AAA AAA AAA or U/D, the
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> layout cells are
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A either LEFTRIGHT or
> >A A A >AA AA AA TOPBOTTOM.AAAAAA Rather
> >A A A >AA AA AA >AAA AAA AAA than embed your
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> percentage
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A check in all of the if
> >A A A >AA AA AA statements that
> >A A A >AA AA AA >AAA AAA AAA check for 'L', 'R',
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> etc., you
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA can
> >A A A pull this check out
> >A A A >AA AA AA to the top,
> >A A A >AA AA AA >AAA AAA AAA something like:
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA if
> >A A A (layout ==
> >A A A >AA AA AA LAYOUT_TOPBOTTOM)
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A AAAAAA AAAAAA adjust =
> >A A A >AA AA AA (wp->sy * percentage) /
> >A A A >AA AA AA >AAA AAA AAA 100
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA else
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A AAAAAA AAAAAA adjust =
> >A A A >AA AA AA (wp->sx * percentage) /
> >A A A >AA AA AA >AAA AAA AAA 100
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA I'm
> >A A A sure you get the
> >A A A >AA AA AA idea.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A Kindly,
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A Thomas
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA On
> >A A A Sun, 6 Oct 2019 at
> >A A A >AA AA AA 20:56, Anindya
> >A A A >AA AA AA >AAA AAA AAA Mukherjee
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> <anin...@gmail.com>
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A wrote:
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A Hi, I have been playing
> >A A A >AA AA AA with adding a
> >A A A >AA AA AA >AAA AAA AAA percent option to
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> resize-pane.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA It's
> >A A A on the todo list
> >A A A >AA AA AA (small things) for
> >A A A >AA AA AA >AAA AAA AAA tmux, and I find
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> it very
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A useful. Right now it's
> >A A A >AA AA AA working for me but
> >A A A >AA AA AA >AAA AAA AAA being new to
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> tmux code I would
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA love
> >A A A to have some eyes on
> >A A A >AA AA AA it. I have
> >A A A >AA AA AA >AAA AAA AAA attached my changes.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA > If
> >A A A this is
> >A A A >AA AA AA worthwhile/useful then I can
> >A A A >AA AA AA >AAA AAA AAA do it properly
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> via github. In
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA that
> >A A A case any advice on
> >A A A >AA AA AA the proper
> >A A A >AA AA AA >AAA AAA AAA procedure is welcome!
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A Anindya
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA > --
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA >
> >A A A You received this
> >A A A >AA AA AA message because you are
> >A A A >AA AA AA >AAA AAA AAA subscribed to
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> the Google
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAA
> >A A A Groups "tmux-users"
> >A A A >AA AA AA group.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA > To
> >A A A unsubscribe from
> >A A A >AA AA AA this group and stop
> >A A A >AA AA AA >AAA AAA AAA receiving emails
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> from it, send
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA an
> >A A A email to
> >A A A >AA AA AA >AAA AAA AAA
> tmux-users+...@googlegroups.com.
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA AAAAA > To
> >A A A view this discussion
> >A A A >AA AA AA on the web, visit
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> >AAAAA AAAAA A
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA A
> >A A A >AA AA AA >AAA AAA A
> >A A A >AA AA AA >
> >A A A >AA AA AA >AAA AAA AAA > diff --git
> a/cmd-resize-pane.c
> >A A A b/cmd-resize-pane.c
> >A A A >AA AA AA >AAA AAA AAA > index 8d35d96f..519c9d5e
> 100644
> >A A A >AA AA AA >AAA AAA AAA > --- a/cmd-resize-pane.c
> >A A A >AA AA AA >AAA AAA AAA > +++ b/cmd-resize-pane.c
> >A A A >AA AA AA >AAA AAA AAA > @@ -35,9 +35,9 @@ const
> struct cmd_entry
> >A A A >AA AA AA cmd_resize_pane_entry = {
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A .name =
> "resize-pane",
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A .alias =
> "resizep",
> >A A A >AA AA AA >AAA AAA AAA >A
> >A A A >AA AA AA >AAA AAA AAA > -AAAA AAAA A .args = {
> "DLMRt:Ux:y:Z", 0, 1 },
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA A .args = {
> "DLMp:Rt:Ux:y:Z", 0, 1
> >A A A },
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A .usage =
> "[-DLMRUZ] [-x width]
> >A A A [-y height] "
> >A A A >AA AA AA >AAA AAA AAA CMD_TARGET_PANE_USAGE " "
> >A A A >AA AA AA >AAA AAA AAA > -AAAA AAAA AAAA AAAA
> AAAA AAAA AAA
> >A A A "[adjustment]",
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA "[-p
> >A A A percentage] [adjustment]",
> >A A A >AA AA AA >AAA AAA AAA >A
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A .target =
> { 't', CMD_FIND_PANE,
> >A A A 0 },
> >A A A >AA AA AA >AAA AAA AAA >A
> >A A A >AA AA AA >AAA AAA AAA > @@ -57,8 +57,9 @@
> cmd_resize_pane_exec(struct
> >A A A cmd *self,
> >A A A >AA AA AA struct
> >A A A >AA AA AA >AAA AAA AAA cmdq_item *item)
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A struct
> sessionAAAA AAAA AAA
> >A A A AAAA AAAA *s =
> >A A A >AA AA AA item->target.s;
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A const
> charAAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA *errstr;
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A charAAAA
> AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AAAA AA
> >A A A >AA AA AA *cause;
> >A A A >AA AA AA >AAA AAA AAA > -AAAA AAAA A u_intAAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AA
> >A A A >AA AA AA adjust;
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA A u_intAAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AA
> >A A A >AA AA AA adjust = 0;
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A intAAAA
> AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AAAA AAAA AA
> >A A A >AA AA AA x, y;
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> u_intAAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AAAA AA
> >A A A >AA AA AA AAAA percentage = 0;
> >A A A >AA AA AA >AAA AAA AAA >A
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A if
> (args_has(args, 'M')) {
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> AAAA AAAA A if
> >A A A >AA AA AA (cmd_mouse_window(&shared->mouse, &s) ==
> >A A A >AA AA AA >AAA AAA AAA NULL)
> >A A A >AA AA AA >AAA AAA AAA > @@ -81,7 +82,29 @@
> cmd_resize_pane_exec(struct
> >A A A cmd *self,
> >A A A >AA AA AA struct
> >A A A >AA AA AA >AAA AAA AAA cmdq_item *item)
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A }
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A
> server_unzoom_window(w);
> >A A A >AA AA AA >AAA AAA AAA >A
> >A A A >AA AA AA >AAA AAA AAA > -AAAA AAAA A if (args->argc
> == 0)
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA if
> (args_has(args, 'p')) {
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAA
> >A A A percentage =
> >A A A >AA AA AA args_strtonum(args, 'p', 0,
> >A A A >AA AA AA >AAA AAA AAA INT_MAX, &cause);
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA A if (cause !=
> >A A A NULL) {
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA A cmdq_error(item,
> >A A A >AA AA AA "percentage %s",
> >A A A >AA AA AA >AAA AAA AAA cause);
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA A free(cause);
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA A return
> >A A A >AA AA AA (CMD_RETURN_ERROR);
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA A }
> >A A A >AA AA AA >AAA AAA AAA > +
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA /*
> >A A A Should not also have an
> >A A A >AA AA AA adjustment in this
> >A A A >AA AA AA >AAA AAA AAA case. */
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA if
> >A A A (args->argc > 0) {
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA A cmdq_error(item,
> >A A A >AA AA AA "percentage and
> >A A A >AA AA AA >AAA AAA AAA adjustment are mutually
> exclusive");
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA A return
> >A A A >AA AA AA (CMD_RETURN_ERROR);
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA }
> >A A A >AA AA AA >AAA AAA AAA > +
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA /*
> >A A A Calculate adjustment
> >A A A >AA AA AA from parent cell
> >A A A >AA AA AA >AAA AAA AAA size. */
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA if
> >A A A >AA AA AA (wp->layout_cell->parent) { /* A cell
> >A A A >AA AA AA >AAA AAA AAA filling the terminal has no
> parent */
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA if
> >A A A >AA AA AA (args_has(args, 'U') ||
> >A A A >AA AA AA >AAA AAA AAA args_has(args, 'D'))
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AAAA AAAA AA
> >A A A >AA AA AA AAAA adjust =
> >A A A >AA AA AA >AAA AAA AAA (wp->layout_cell->parent->sy *
> percentage) / 100;
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA else
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA AAA
> >A A A AAAA AAAA AAAA AAAA AAAA AA
> >A A A >AA AA AA AAAA adjust =
> >A A A >AA AA AA >AAA AAA AAA (wp->layout_cell->parent->sx *
> percentage) / 100;
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA
> AAAA AAAA AAAA AAAA }
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA AAAA AAAA }
> >A A A >AA AA AA >AAA AAA AAA > +AAAA AAAA A else if
> (args->argc == 0)
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> AAAA AAAA A adjust = 1;
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA A else {
> >A A A >AA AA AA >AAA AAA AAA >AAAA AAAA AAAA AAAA AAAA
> AAAA AAAA A adjust =
> >A A A >AA AA AA strtonum(args->argv[0], 1, INT_MAX,
> >A A A >AA AA AA >AAA AAA AAA &errstr);
> >A A A >AA AA AA >AAA AAA AAA > diff --git a/tmux.1 b/tmux.1
> >A A A >AA AA AA >AAA AAA AAA > index e095ba40..f548af2c
> 100644
> >A A A >AA AA AA >AAA AAA AAA > --- a/tmux.1
> >A A A >AA AA AA >AAA AAA AAA > +++ b/tmux.1
> >A A A >AA AA AA >AAA AAA AAA > @@ -2224,13 +2224,18 @@ if
> specified, to
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Ar new-name .
> >A A A >AA AA AA >AAA AAA AAA >AAAA .It Xo Ic resize-pane
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Op Fl DLMRUZ
> >A A A >AA AA AA >AAA AAA AAA > +.Op Fl p Ar percentage
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Op Fl t Ar target-pane
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Op Fl x Ar width
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Op Fl y Ar height
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Op Ar adjustment
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Xc
> >A A A >AA AA AA >AAA AAA AAA >AAAA .D1 (alias: Ic resizep )
> >A A A >AA AA AA >AAA AAA AAA > -Resize a pane, up, down,
> left or right by
> >A A A >AA AA AA >AAA AAA AAA > +Resize a pane, up, down,
> left or right by a
> >A A A >AA AA AA >AAA AAA AAA > +.Ar percentage
> >A A A >AA AA AA >AAA AAA AAA > +of the available space
> >A A A >AA AA AA >AAA AAA AAA > +.Fl p
> >A A A >AA AA AA >AAA AAA AAA > +or by
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Ar adjustment
> >A A A >AA AA AA >AAA AAA AAA >AAAA with
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Fl U ,
> >A A A >AA AA AA >AAA AAA AAA > @@ -2246,7 +2251,11 @@ or
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Fl y .
> >A A A >AA AA AA >AAA AAA AAA >AAAA The
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Ar adjustment
> >A A A >AA AA AA >AAA AAA AAA > -is given in lines or cells
> (the default is 1).
> >A A A >AA AA AA >AAA AAA AAA > +is given in lines or cells
> (the default is 1).
> >A A A The
> >A A A >AA AA AA >AAA AAA AAA > +.Ar percentage
> >A A A >AA AA AA >AAA AAA AAA > +and the
> >A A A >AA AA AA >AAA AAA AAA > +.Ar adjustment
> >A A A >AA AA AA >AAA AAA AAA > +are mutually exclusive.
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Pp
> >A A A >AA AA AA >AAA AAA AAA >AAAA With
> >A A A >AA AA AA >AAA AAA AAA >AAAA .Fl Z ,
> >A A A >
> >A A A >AA AA AA > diff --git a/cmd-resize-pane.c
> b/cmd-resize-pane.c
> >A A A >AA AA AA > index 8d35d96f..eeddabf9 100644
> >A A A >AA AA AA > --- a/cmd-resize-pane.c
> >A A A >AA AA AA > +++ b/cmd-resize-pane.c
> >A A A >AA AA AA > @@ -35,9 +35,9 @@ const struct cmd_entry
> >A A A cmd_resize_pane_entry = {
> >A A A >AA AA AA >AAA AAA AAA A .name = "resize-pane",
> >A A A >AA AA AA >AAA AAA AAA A .alias = "resizep",
> >A A A >AA AA AA >A
> >A A A >AA AA AA > -AAA AAA A .args = { "DLMRt:Ux:y:Z", 0, 1
> },
> >A A A >AA AA AA > +AAA AAA A .args = { "DLMp:Rt:Ux:y:Z", 0, 1
> },
> >A A A >AA AA AA >AAA AAA AAA A .usage = "[-DLMRUZ] [-x
> width] [-y height] "
> >A A A >AA AA AA CMD_TARGET_PANE_USAGE " "
> >A A A >AA AA AA > -AAA AAA AAA AAA AAA AAA AAA
> "[adjustment]",
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA "[-p
> percentage] [adjustment]",
> >A A A >AA AA AA >A
> >A A A >AA AA AA >AAA AAA AAA A .target = { 't',
> CMD_FIND_PANE, 0 },
> >A A A >AA AA AA >A
> >A A A >AA AA AA > @@ -55,9 +55,10 @@
> cmd_resize_pane_exec(struct cmd *self,
> >A A A struct
> >A A A >AA AA AA cmdq_item *item)
> >A A A >AA AA AA >AAA AAA AAA A struct windowAAA AAA AAA
> AAA AAA A *w =
> >A A A wl->window;
> >A A A >AA AA AA >AAA AAA AAA A struct clientAAA AAA AAA
> AAA AAA A *c =
> >A A A item->client;
> >A A A >AA AA AA >AAA AAA AAA A struct sessionAAA AAA AAA
> AAA AAA *s =
> >A A A item->target.s;
> >A A A >AA AA AA > +AAA AAA A struct layout_cellAAA AAA AAA
> *rootlc;
> >A A A >AA AA AA >AAA AAA AAA A const charAAA AAA AAA AAA
> AAA AAA AAA *errstr;
> >A A A >AA AA AA >AAA AAA AAA A charAAA AAA AAA AAA AAA
> AAA AAA AAA AAA AA
> >A A A *cause;
> >A A A >AA AA AA > -AAA AAA A u_intAAA AAA AAA AAA AAA
> AAA AAA AAA AAA AA
> >A A A adjust;
> >A A A >AA AA AA > +AAA AAA A u_intAAA AAA AAA AAA AAA
> AAA AAA AAA AAA AA
> >A A A adjust = 0, percentage =
> >A A A >AA AA AA 0;
> >A A A >AA AA AA >AAA AAA AAA A intAAA AAA AAA AAA AAA
> AAA AAA AAA AAA AAA AA
> >A A A x, y;
> >A A A >AA AA AA >A
> >A A A >AA AA AA >AAA AAA AAA A if (args_has(args, 'M')) {
> >A A A >AA AA AA > @@ -81,7 +82,33 @@
> cmd_resize_pane_exec(struct cmd *self,
> >A A A struct
> >A A A >AA AA AA cmdq_item *item)
> >A A A >AA AA AA >AAA AAA AAA A }
> >A A A >AA AA AA >AAA AAA AAA A server_unzoom_window(w);
> >A A A >AA AA AA >A
> >A A A >AA AA AA > -AAA AAA A if (args->argc == 0)
> >A A A >AA AA AA > +AAA AAA A if (args_has(args, 'p')) {
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A percentage =
> args_strtonum(args,
> >A A A 'p', 0, INT_MAX,
> >A A A >AA AA AA &cause);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A if (cause !=
> NULL) {
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A cmdq_error(item,
> >A A A "percentage %s",
> >A A A >AA AA AA cause);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A free(cause);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A return
> >A A A (CMD_RETURN_ERROR);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A }
> >A A A >AA AA AA > +
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A /* Should
> not also have an
> >A A A adjustment in this
> >A A A >AA AA AA case. */
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A if
> (args->argc > 0) {
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A cmdq_error(item,
> >A A A "percentage and
> >A A A >AA AA AA adjustment "
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA AAA AAA AAA AAA AA
> >A A A AAA AAA AAA A "are mutually
> >A A A >AA AA AA exclusive");
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A return
> >A A A (CMD_RETURN_ERROR);
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A }
> >A A A >AA AA AA > +
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A /* Find the
> root layout cell */
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A rootlc =
> wp->layout_cell;
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A while
> (rootlc->parent)
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A rootlc =
> >A A A rootlc->parent;
> >A A A >AA AA AA > +
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A /* Calculate
> adjustment from the
> >A A A root cell size.
> >A A A >AA AA AA */
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A if
> (args_has(args, 'U') ||
> >A A A args_has(args, 'D'))
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A adjust =
> >A A A (rootlc->sy * percentage) /
> >A A A >AA AA AA 100;
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA A else
> >A A A >AA AA AA > +AAA AAA AAA AAA AAA AAA AAA AAA AAA
> AAA A adjust =
> >A A A (rootlc->sx * percentage) /
> >A A A >AA AA AA 100;
> >A A A >AA AA AA > +AAA AAA A }
> >A A A >AA AA AA > +AAA AAA A else if (args->argc == 0)
> >A A A >AA AA AA >AAA AAA AAA AAA AAA AAA AAA A adjust =
> 1;
> >A A A >AA AA AA >AAA AAA AAA A else {
> >A A A >AA AA AA >AAA AAA AAA AAA AAA AAA AAA A adjust =
> >A A A strtonum(args->argv[0], 1, INT_MAX,
> >A A A >AA AA AA &errstr);
> >A A A >AA AA AA > diff --git a/tmux.1 b/tmux.1
> >A A A >AA AA AA > index e095ba40..41066ddc 100644
> >A A A >AA AA AA > --- a/tmux.1
> >A A A >AA AA AA > +++ b/tmux.1
> >A A A >AA AA AA > @@ -2224,13 +2224,18 @@ if specified, to
> >A A A >AA AA AA >AAA .Ar new-name .
> >A A A >AA AA AA >AAA .It Xo Ic resize-pane
> >A A A >AA AA AA >AAA .Op Fl DLMRUZ
> >A A A >AA AA AA > +.Op Fl p Ar percentage
> >A A A >AA AA AA >AAA .Op Fl t Ar target-pane
> >A A A >AA AA AA >AAA .Op Fl x Ar width
> >A A A >AA AA AA >AAA .Op Fl y Ar height
> >A A A >AA AA AA >AAA .Op Ar adjustment
> >A A A >AA AA AA >AAA .Xc
> >A A A >AA AA AA >AAA .D1 (alias: Ic resizep )
> >A A A >AA AA AA > -Resize a pane, up, down, left or right by
> >A A A >AA AA AA > +Resize a pane, up, down, left or right by a
> >A A A >AA AA AA > +.Ar percentage
> >A A A >AA AA AA > +of the available space
> >A A A >AA AA AA > +.Fl p
> >A A A >AA AA AA > +or by
> >A A A >AA AA AA >AAA .Ar adjustment
> >A A A >AA AA AA >AAA with
> >A A A >AA AA AA >AAA .Fl U ,
> >A A A >AA AA AA > @@ -2246,7 +2251,12 @@ or
> >A A A >AA AA AA >AAA .Fl y .
> >A A A >AA AA AA >AAA The
> >A A A >AA AA AA >AAA .Ar adjustment
> >A A A >AA AA AA > -is given in lines or cells (the default is
> 1).
> >A A A >AA AA AA > +is given in lines or columns (the default is
> 1).
> >A A A >AA AA AA > +The
> >A A A >AA AA AA > +.Ar percentage
> >A A A >AA AA AA > +and the
> >A A A >AA AA AA > +.Ar adjustment
> >A A A >AA AA AA > +are mutually exclusive.
> >A A A >AA AA AA >AAA .Pp
> >A A A >AA AA AA >AAA With
> >A A A >AA AA AA >AAA .Fl Z ,

> diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c
> index 8d35d96f..318923ed 100644
> --- a/cmd-resize-pane.c
> +++ b/cmd-resize-pane.c
> @@ -19,6 +19,7 @@
> #include <sys/types.h>
>
> #include <stdlib.h>
> +#include <string.h>
>
> #include "tmux.h"
>
> @@ -55,10 +56,10 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
> struct window *w = wl->window;
> struct client *c = item->client;
> struct session *s = item->target.s;
> - const char *errstr;
> - char *cause;
> + const char *errstr, *percentstr;
> + char *cause, *percentvalstr;
> u_int adjust;
> - int x, y;
> + int x, y, percent, percentstrlen;
>
> if (args_has(args, 'M')) {
> if (cmd_mouse_window(&shared->mouse, &s) == NULL)
> @@ -92,21 +93,73 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
> }
>
> if (args_has(args, 'x')) {
> - x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause);
> - if (cause != NULL) {
> - cmdq_error(item, "width %s", cause);
> - free(cause);
> + /* First check for percentage */
> + percentstr = args_get(args, 'x');
> + if (percentstr == NULL) {
> + cmdq_error(item, "missing");
> return (CMD_RETURN_ERROR);
> }
> +
> + percentstrlen = strlen(percentstr);
> + if (percentstr[percentstrlen - 1] == '%') {
> + percentvalstr = xstrdup(percentstr);
> + percentvalstr[percentstrlen - 1] = '\0';
> + percent = strtonum(percentvalstr, 0, INT_MAX, &errstr);
> + free(percentvalstr);
> + if (errstr != NULL) {
> + cmdq_error(item, "width percent %s", errstr);
> + return (CMD_RETURN_ERROR);
> + }
> + x = (w->sx * percent) / 100;
> + if (x < PANE_MINIMUM)
> + x = PANE_MINIMUM;
> + if (x > INT_MAX)
> + x = INT_MAX;
> + }
> + else {
> + /* Check for absolute value */
> + x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause);
> + if (cause != NULL) {
> + cmdq_error(item, "width %s", cause);
> + free(cause);
> + return (CMD_RETURN_ERROR);
> + }
> + }
> layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x);
> }
> if (args_has(args, 'y')) {
> - y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause);
> - if (cause != NULL) {
> - cmdq_error(item, "height %s", cause);
> - free(cause);
> + /* First check for percentage */
> + percentstr = args_get(args, 'y');
> + if (percentstr == NULL) {
> + cmdq_error(item, "missing");
> return (CMD_RETURN_ERROR);
> }
> +
> + percentstrlen = strlen(percentstr);
> + if (percentstr[percentstrlen - 1] == '%') {
> + percentvalstr = xstrdup(percentstr);
> + percentvalstr[percentstrlen - 1] = '\0';
> + percent = strtonum(percentvalstr, 0, INT_MAX, &errstr);
> + free(percentvalstr);
> + if (errstr != NULL) {
> + cmdq_error(item, "height percent %s", errstr);
> + return (CMD_RETURN_ERROR);
> + }
> + y = (w->sy * percent) / 100;
> + if (y < PANE_MINIMUM)
> + y = PANE_MINIMUM;
> + if (y > INT_MAX)
> + y = INT_MAX;
> + }
> + else {
> + /* Check for absolute value */
> + y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause);
> + if (cause != NULL) {
> + cmdq_error(item, "height %s", cause);
> + free(cause);
> + return (CMD_RETURN_ERROR);
> + }
> + }
> layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y);
> }
>
> diff --git a/tmux.1 b/tmux.1
> index e095ba40..aa24d8ea 100644
> --- a/tmux.1
> +++ b/tmux.1
> @@ -2225,8 +2225,8 @@ if specified, to
> .It Xo Ic resize-pane
> .Op Fl DLMRUZ
> .Op Fl t Ar target-pane
> -.Op Fl x Ar width
> -.Op Fl y Ar height
> +.Op Fl x Ar width | percent%
> +.Op Fl y Ar height | percent%
> .Op Ar adjustment
> .Xc
> .D1 (alias: Ic resizep )
> @@ -2246,7 +2246,8 @@ or
> .Fl y .
> The
> .Ar adjustment
> -is given in lines or cells (the default is 1).
> +is given in lines or columns (the default is 1).
> +The percentages are based on the root window dimensions.

Anindya Mukherjee

unread,
Oct 9, 2019, 4:16:55 AM10/9/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Thanks!! I'll look into split-window next :)
>        >A  A  A  >AA  AA  AA  > +AAA  AAA>        >A  A  A  adjust = 0, percentage =

>        >A  A  A  >AA  AA  AA  0;
>        >A  A  A  >AA  AA  AA  >AAA  AAA  AAA  A intAAA  AAA  AAA  AAA  AAA
>        AAA  AAA>        >A  A  A  >AA  AA  AA  >A
>  >


--
Best,
Anindya

Anindya Mukherjee

unread,
Oct 10, 2019, 2:15:27 PM10/10/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Hi, I have added a -l xxx% option to split-window. It is equivalent to using -p xxx.

Best,
Anindya

resize-pane-percent-diff.txt

Nicholas Marriott

unread,
Oct 14, 2019, 5:59:23 AM10/14/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
Hi

I have made a few changes to your diff, an updated one is below:

- The variable names are very long which means some of the lines are
either too long or need to wrap so I made them a lot shorter.

- It is not necessary to check if args_get('x') is NULL if we know
args_has('x') is true - in fact we can just do args_get instead of
args_has.

- I forgot that join-pane also has -p so I changed it too (it is much
the same code as split-window).

- I think we can remove -p from the man page since the "-l 10%" form is
clearly better. It is still supported in the code for backwards
compatibility.

Let me know if you see any problems.

Thanks!


Index: cmd-join-pane.c
===================================================================
RCS file: /cvs/src/usr.bin/tmux/cmd-join-pane.c,v
retrieving revision 1.35
diff -u -p -r1.35 cmd-join-pane.c
--- cmd-join-pane.c 20 Jun 2019 11:59:59 -0000 1.35
+++ cmd-join-pane.c 14 Oct 2019 09:58:24 -0000
@@ -21,6 +21,7 @@

#include <paths.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>

#include "tmux.h"
@@ -36,7 +37,7 @@ const struct cmd_entry cmd_join_pane_ent
.alias = "joinp",

.args = { "bdhvp:l:s:t:", 0, 0 },
- .usage = "[-bdhv] [-p percentage|-l size] " CMD_SRCDST_PANE_USAGE,
+ .usage = "[-bdhv] [-l size] " CMD_SRCDST_PANE_USAGE,

.source = { 's', CMD_FIND_PANE, CMD_FIND_DEFAULT_MARKED },
.target = { 't', CMD_FIND_PANE, 0 },
@@ -68,11 +69,13 @@ cmd_join_pane_exec(struct cmd *self, str
struct winlink *src_wl, *dst_wl;
struct window *src_w, *dst_w;
struct window_pane *src_wp, *dst_wp;
- char *cause;
- int size, percentage, dst_idx;
+ char *cause, *copy;
+ const char *errstr, *p;
+ size_t plen;
+ int size, percentage, dst_idx, not_same_window;
+ int flags;
enum layout_type type;
struct layout_cell *lc;
- int not_same_window, flags;

if (self->entry == &cmd_join_pane_entry)
not_same_window = 1;
@@ -105,12 +108,28 @@ cmd_join_pane_exec(struct cmd *self, str
type = LAYOUT_LEFTRIGHT;

size = -1;
- if (args_has(args, 'l')) {
- size = args_strtonum(args, 'l', 0, INT_MAX, &cause);
- if (cause != NULL) {
- cmdq_error(item, "size %s", cause);
- free(cause);
- return (CMD_RETURN_ERROR);
+ if ((p = args_get(args, 'l')) != NULL) {
+ plen = strlen(p);
+ if (p[plen - 1] == '%') {
+ copy = xstrdup(p);
+ copy[plen - 1] = '\0';
+ percentage = strtonum(copy, 0, INT_MAX, &errstr);
+ free(copy);
+ if (errstr != NULL) {
+ cmdq_error(item, "percentage %s", errstr);
+ return (CMD_RETURN_ERROR);
+ }
+ if (type == LAYOUT_TOPBOTTOM)
+ size = (dst_wp->sy * percentage) / 100;
+ else
+ size = (dst_wp->sx * percentage) / 100;
+ } else {
+ size = args_strtonum(args, 'l', 0, INT_MAX, &cause);
+ if (cause != NULL) {
+ cmdq_error(item, "size %s", cause);
+ free(cause);
+ return (CMD_RETURN_ERROR);
+ }
}
} else if (args_has(args, 'p')) {
percentage = args_strtonum(args, 'p', 0, 100, &cause);
Index: cmd-resize-pane.c
===================================================================
RCS file: /cvs/src/usr.bin/tmux/cmd-resize-pane.c,v
retrieving revision 1.38
diff -u -p -r1.38 cmd-resize-pane.c
--- cmd-resize-pane.c 6 Jul 2019 20:56:34 -0000 1.38
+++ cmd-resize-pane.c 14 Oct 2019 09:58:24 -0000
@@ -19,6 +19,7 @@
#include <sys/types.h>

#include <stdlib.h>
+#include <string.h>

#include "tmux.h"

@@ -55,10 +56,11 @@ cmd_resize_pane_exec(struct cmd *self, s
struct window *w = wl->window;
struct client *c = item->client;
struct session *s = item->target.s;
- const char *errstr;
- char *cause;
+ const char *errstr, *p;
+ char *cause, *copy;
u_int adjust;
- int x, y;
+ int x, y, percentage;
+ size_t plen;

if (args_has(args, 'M')) {
if (cmd_mouse_window(&shared->mouse, &s) == NULL)
@@ -91,21 +93,58 @@ cmd_resize_pane_exec(struct cmd *self, s
}
}

- if (args_has(args, 'x')) {
- x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause);
- if (cause != NULL) {
- cmdq_error(item, "width %s", cause);
- free(cause);
- return (CMD_RETURN_ERROR);
+ if ((p = args_get(args, 'x')) != NULL) {
+ plen = strlen(p);
+ if (p[plen - 1] == '%') {
+ copy = xstrdup(p);
+ copy[plen - 1] = '\0';
+ percentage = strtonum(copy, 0, INT_MAX, &errstr);
+ free(copy);
+ if (errstr != NULL) {
+ cmdq_error(item, "width %s", errstr);
+ return (CMD_RETURN_ERROR);
+ }
+ x = (w->sx * percentage) / 100;
+ if (x < PANE_MINIMUM)
+ x = PANE_MINIMUM;
+ if (x > INT_MAX)
+ x = INT_MAX;
+ } else {
+ x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX,
+ &cause);
+ if (cause != NULL) {
+ cmdq_error(item, "width %s", cause);
+ free(cause);
+ return (CMD_RETURN_ERROR);
+ }
}
layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x);
}
- if (args_has(args, 'y')) {
- y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause);
- if (cause != NULL) {
- cmdq_error(item, "height %s", cause);
- free(cause);
- return (CMD_RETURN_ERROR);
+ if ((p = args_get(args, 'y')) != NULL) {
+ plen = strlen(p);
+ if (p[plen - 1] == '%') {
+ copy = xstrdup(p);
+ copy[plen - 1] = '\0';
+ percentage = strtonum(copy, 0, INT_MAX, &errstr);
+ free(copy);
+ if (errstr != NULL) {
+ cmdq_error(item, "height %s", errstr);
+ return (CMD_RETURN_ERROR);
+ }
+ y = (w->sy * percentage) / 100;
+ if (y < PANE_MINIMUM)
+ y = PANE_MINIMUM;
+ if (y > INT_MAX)
+ y = INT_MAX;
+ }
+ else {
+ y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX,
+ &cause);
+ if (cause != NULL) {
+ cmdq_error(item, "height %s", cause);
+ free(cause);
+ return (CMD_RETURN_ERROR);
+ }
}
layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y);
}
Index: cmd-split-window.c
===================================================================
RCS file: /cvs/src/usr.bin/tmux/cmd-split-window.c,v
retrieving revision 1.95
diff -u -p -r1.95 cmd-split-window.c
--- cmd-split-window.c 3 May 2019 20:44:24 -0000 1.95
+++ cmd-split-window.c 14 Oct 2019 09:58:24 -0000
@@ -42,8 +42,7 @@ const struct cmd_entry cmd_split_window_

.args = { "bc:de:fF:hIl:p:Pt:v", 0, -1 },
.usage = "[-bdefhIPv] [-c start-directory] [-e environment] "
- "[-F format] [-p percentage|-l size] " CMD_TARGET_PANE_USAGE
- " [command]",
+ "[-F format] [-l size] " CMD_TARGET_PANE_USAGE " [command]",

.target = { 't', CMD_FIND_PANE, 0 },

@@ -65,20 +64,37 @@ cmd_split_window_exec(struct cmd *self,
struct layout_cell *lc;
struct cmd_find_state fs;
int size, percentage, flags, input;
- const char *template, *add;
- char *cause, *cp;
+ const char *template, *add, *errstr, *p;
+ char *cause, *cp, *copy;
+ size_t plen;
struct args_value *value;

if (args_has(args, 'h'))
type = LAYOUT_LEFTRIGHT;
else
type = LAYOUT_TOPBOTTOM;
- if (args_has(args, 'l')) {
- size = args_strtonum(args, 'l', 0, INT_MAX, &cause);
- if (cause != NULL) {
- cmdq_error(item, "create pane failed: -l %s", cause);
- free(cause);
- return (CMD_RETURN_ERROR);
+ if ((p = args_get(args, 'l')) != NULL) {
+ plen = strlen(p);
+ if (p[plen - 1] == '%') {
+ copy = xstrdup(p);
+ copy[plen - 1] = '\0';
+ percentage = strtonum(copy, 0, INT_MAX, &errstr);
+ free(copy);
+ if (errstr != NULL) {
+ cmdq_error(item, "percentage %s", errstr);
+ return (CMD_RETURN_ERROR);
+ }
+ if (type == LAYOUT_TOPBOTTOM)
+ size = (wp->sy * percentage) / 100;
+ else
+ size = (wp->sx * percentage) / 100;
+ } else {
+ size = args_strtonum(args, 'l', 0, INT_MAX, &cause);
+ if (cause != NULL) {
+ cmdq_error(item, "lines %s", cause);
+ free(cause);
+ return (CMD_RETURN_ERROR);
+ }
}
} else if (args_has(args, 'p')) {
percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause);
Index: tmux.1
===================================================================
RCS file: /cvs/src/usr.bin/tmux/tmux.1,v
retrieving revision 1.689
diff -u -p -r1.689 tmux.1
--- tmux.1 19 Sep 2019 09:02:30 -0000 1.689
+++ tmux.1 14 Oct 2019 09:58:24 -0000
@@ -1891,9 +1891,7 @@ zooms the pane.
This command works only if at least one client is attached.
.It Xo Ic join-pane
.Op Fl bdhv
-.Oo Fl l
-.Ar size |
-.Fl p Ar percentage Oc
+.Op Fl l Ar size
.Op Fl s Ar src-pane
.Op Fl t Ar dst-pane
.Xc
@@ -2030,9 +2028,7 @@ flag, see the
section.
.It Xo Ic move-pane
.Op Fl bdhv
-.Oo Fl l
-.Ar size |
-.Fl p Ar percentage Oc
+.Op Fl l Ar size
.Op Fl s Ar src-pane
.Op Fl t Ar dst-pane
.Xc
@@ -2241,8 +2237,14 @@ or
.Fl y .
The
.Ar adjustment
-is given in lines or cells (the default is 1).
-.Pp
+is given in lines or columns (the default is 1);
+.Fl x
+and
+.Fl y
+may be a given as a number of lines or columns or followed by
+.Ql %
+for a percentage of the window size (for example
+.Ql -x 10% ) .
With
.Fl Z ,
the active pane is toggled between zoomed (occupying the whole of the window)
@@ -2434,9 +2436,7 @@ the command behaves like
.Op Fl bdfhIvP
.Op Fl c Ar start-directory
.Op Fl e Ar environment
-.Oo Fl l
-.Ar size |
-.Fl p Ar percentage Oc
+.Op Fl l Ar size
.Op Fl t Ar target-pane
.Op Ar shell-command
.Op Fl F Ar format
@@ -2452,10 +2452,12 @@ a vertical split; if neither is specifie
is assumed.
The
.Fl l
-and
-.Fl p
-options specify the size of the new pane in lines (for vertical split) or in
-cells (for horizontal split), or as a percentage, respectively.
+option specifies the size of the new pane in lines (for vertical split) or in
+columns (for horizontal split);
+.Ar size
+may be followed by
+.Ql %
+to specify a percentage of the available space.
The
.Fl b
option causes the new pane to be created to the left of or above

Anindya Mukherjee

unread,
Oct 14, 2019, 3:43:09 PM10/14/19
to Nicholas Marriott, Thomas Adam, tmux-...@googlegroups.com
Thanks for the updates Nicolas. Looks good! Roughly, when can I expect to see them on git?

Best,
Anindya

Nicholas Marriott

unread,
Oct 15, 2019, 6:19:59 AM10/15/19
to Anindya Mukherjee, Thomas Adam, tmux-...@googlegroups.com
It is in now as 0c5e9c6efae5c3fae84c35f655754fef242c6acc. Thanks!
> --
> 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+...@googlegroups.com.
> To view this discussion on the web, visit https://groups.google.com/d/msgid/tmux-users/CAN%2Bi5iMG3Mn8Bry5RJzeLL6EQSpEACuBr1qMNeMr47-jWMSFTw%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages