Looks good aside from a few style nits I can fix before commit (use tabs
not spaces, all the u_int variable declarations go in the same
statement, line length needs to be <= 80 columns, new line for each new
sentence in tmux.1, "lines or columns" not "lines or cells" in tmux.1).

I don't have strong feelings whether -p means % of parent cell or total
size, it's up to you which you prefer. I'd add a line to the manual
explaining what it means in either case.

Thanks!


On Mon, Oct 07, 2019 at 11:44:46PM -0700, Anindya Mukherjee wrote:
>    Fixed a mistake in the last upload. Sorry for the noise.
>    Although currently I am using the parent layout cell of the target window
>    pane's cell to calculate the available space, I wonder if it would be
>    better to use the root layout cell, which is basically the entire
>    terminal. An example is a 2x2 grid with 4 panes. Here if I just use the
>    parent cell, it only covers half of the available space and the results
>    are a little less intuitive compared to using the top level cell.
>    Best,
>    Anindya
> 
>    On Mon, Oct 7, 2019 at 10:42 PM Anindya Mukherjee <[email protected]>
>    wrote:
> 
>      Some further adjustments. I realised that checking the percentage is not
>      necessary because downstream code handles large values correctly. Also,
>      the layout type of the parent layout_cell is always LAYOUT_WINDOWPANE so
>      I check the args instead while calculating the adjustment (which is also
>      what's done in split-window).
>      Best,
>      Anindya
> 
>      On Mon, Oct 7, 2019 at 9:17 PM Anindya Mukherjee <[email protected]>
>      wrote:
> 
>        Hi Nicholas,
>        Thanks for the feedback! I have adjusted the code accordingly.
>        percentage can now be 0 to INT_MAX as in split-window.
>        Yes, initially I was setting the increment as a percentage of the
>        current pane size thinking that would be convenient. However, upon
>        trying percentage of the available space in the parent cell I prefer
>        that. Also it is then consistent with split-window.
>        Changes attached. Please have a look.
>        Best,
>        Anindya
>        On Mon, Oct 7, 2019 at 4:57 AM Nicholas Marriott
>        <[email protected]> wrote:
> 
>          Thanks for this.
> 
>          For strtonum - I think it does no harm to let people do -p0 or
>          -p99999999 to mean as small or as big as possible.
> 
>          With split-window, -p is a % of the available space, but you have
>          made
>          it a % of the existing size? Is this more useful?
> 
>          You should be able to get the available space by looking at the size
>          of
>          the parent cell (wp->layout_cell->parent->sx and sy).
> 
>          On Sun, Oct 06, 2019 at 03:34:33PM -0700, Anindya Mukherjee wrote:
>          >A  A  Thanks Thomas for the tips! I have adjusted the code
>          accordingly.
>          >A  A  Regarding the args_strtonum call: I want to disallow percent
>          <=0 and >
>          >A  A  100. I thought adding 1, 100 is a convenient way of doing
>          that, and I get
>          >A  A  a "too small/large" error when invalid values are
>          supplied.AA  Is there any
>          >A  A  issue with doing it this way?
>          >A  A  Best,
>          >A  A  Anindya
>          >A  A  On Sun, Oct 6, 2019 at 3:03 PM Thomas Adam
>          <[email protected]> wrote:
>          >
>          >A  A  A  Hi,
>          >
>          >A  A  A  Thanks.AA  Comments below:
>          >
>          >A  A  A  1.AA  You shouldn't need to use 0U for integer
>          definitions.
>          >A  A  A  2.AA  In terms of calling args_strtonum() for
>          percentage:AA  0, INT_MAX
>          >A  A  A  should be OK, rather than 1, 100, no?
>          >A  A  A  3.AA  When you're resizing in either L/R or U/D, the
>          layout cells are
>          >A  A  A  either LEFTRIGHT or TOPBOTTOM.AA  Rather than embed your
>          percentage
>          >A  A  A  check in all of the if statements that check for 'L', 'R',
>          etc., you
>          >A  A  A  can pull this check out to the top, something like:
>          >
>          >A  A  A  if (layout == LAYOUT_TOPBOTTOM)
>          >A  A  A  AA  AA  adjust = (wp->sy * percentage) / 100
>          >A  A  A  else
>          >A  A  A  AA  AA  adjust = (wp->sx * percentage) / 100
>          >
>          >A  A  A  I'm sure you get the idea.
>          >
>          >A  A  A  Kindly,
>          >A  A  A  Thomas
>          >
>          >A  A  A  On Sun, 6 Oct 2019 at 20:56, Anindya Mukherjee
>          <[email protected]>
>          >A  A  A  wrote:
>          >A  A  A  >
>          >A  A  A  > Hi, I have been playing with adding a percent option to
>          resize-pane.
>          >A  A  A  It's on the todo list (small things) for tmux, and I find
>          it very
>          >A  A  A  useful. Right now it's working for me but being new to
>          tmux code I would
>          >A  A  A  love to have some eyes on it. I have attached my changes.
>          >A  A  A  >
>          >A  A  A  > If this is worthwhile/useful then I can do it properly
>          via github. In
>          >A  A  A  that case any advice on the proper procedure is welcome!
>          >A  A  A  >
>          >A  A  A  > Anindya
>          >A  A  A  >
>          >A  A  A  > --
>          >A  A  A  > You received this message because you are subscribed to
>          the Google
>          >A  A  A  Groups "tmux-users" group.
>          >A  A  A  > To unsubscribe from this group and stop receiving emails
>          from it, send
>          >A  A  A  an email to [email protected].
>          >A  A  A  > To view this discussion on the web, visit
>          >A  A  A 
>          
> https://groups.google.com/d/msgid/tmux-users/CAN%2Bi5iO9yh4TSNJ_r7397%2BCwW55%2BwHqDOs20CBYpFmoXeZfHTA%40mail.gmail.com.

> diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c
> index 8d35d96f..519c9d5e 100644
> --- a/cmd-resize-pane.c
> +++ b/cmd-resize-pane.c
> @@ -35,9 +35,9 @@ const struct cmd_entry cmd_resize_pane_entry = {
>       .name = "resize-pane",
>       .alias = "resizep",
>  
> -     .args = { "DLMRt:Ux:y:Z", 0, 1 },
> +     .args = { "DLMp:Rt:Ux:y:Z", 0, 1 },
>       .usage = "[-DLMRUZ] [-x width] [-y height] " CMD_TARGET_PANE_USAGE " "
> -              "[adjustment]",
> +              "[-p percentage] [adjustment]",
>  
>       .target = { 't', CMD_FIND_PANE, 0 },
>  
> @@ -57,8 +57,9 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item 
> *item)
>       struct session          *s = item->target.s;
>       const char              *errstr;
>       char                    *cause;
> -     u_int                    adjust;
> +     u_int                    adjust = 0;
>       int                      x, y;
> +        u_int                    percentage = 0;
>  
>       if (args_has(args, 'M')) {
>               if (cmd_mouse_window(&shared->mouse, &s) == NULL)
> @@ -81,7 +82,29 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item 
> *item)
>       }
>       server_unzoom_window(w);
>  
> -     if (args->argc == 0)
> +        if (args_has(args, 'p')) {
> +                percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause);
> +             if (cause != NULL) {
> +                     cmdq_error(item, "percentage %s", cause);
> +                     free(cause);
> +                     return (CMD_RETURN_ERROR);
> +             }
> +
> +                /* Should not also have an adjustment in this case. */
> +                if (args->argc > 0) {
> +                     cmdq_error(item, "percentage and adjustment are 
> mutually exclusive");
> +                     return (CMD_RETURN_ERROR);
> +                }
> +
> +                /* Calculate adjustment from parent cell size. */
> +                if (wp->layout_cell->parent) { /* A cell filling the 
> terminal has no parent */
> +                        if (args_has(args, 'U') || args_has(args, 'D'))
> +                                adjust = (wp->layout_cell->parent->sy * 
> percentage) / 100;
> +                        else
> +                                adjust = (wp->layout_cell->parent->sx * 
> percentage) / 100;
> +                }
> +        }
> +     else if (args->argc == 0)
>               adjust = 1;
>       else {
>               adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr);
> diff --git a/tmux.1 b/tmux.1
> index e095ba40..f548af2c 100644
> --- a/tmux.1
> +++ b/tmux.1
> @@ -2224,13 +2224,18 @@ if specified, to
>  .Ar new-name .
>  .It Xo Ic resize-pane
>  .Op Fl DLMRUZ
> +.Op Fl p Ar percentage
>  .Op Fl t Ar target-pane
>  .Op Fl x Ar width
>  .Op Fl y Ar height
>  .Op Ar adjustment
>  .Xc
>  .D1 (alias: Ic resizep )
> -Resize a pane, up, down, left or right by
> +Resize a pane, up, down, left or right by a
> +.Ar percentage
> +of the available space
> +.Fl p
> +or by
>  .Ar adjustment
>  with
>  .Fl U ,
> @@ -2246,7 +2251,11 @@ or
>  .Fl y .
>  The
>  .Ar adjustment
> -is given in lines or cells (the default is 1).
> +is given in lines or cells (the default is 1). The
> +.Ar percentage
> +and the
> +.Ar adjustment
> +are mutually exclusive.
>  .Pp
>  With
>  .Fl Z ,

-- 
You received this message because you are subscribed to the Google Groups 
"tmux-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/tmux-users/20191008070515.bzhi4zwiubzawx67%40yelena.

Reply via email to