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 <
[email protected]> 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
>   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
> >    <[email protected]> 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
> >      <[email protected]>
> >      >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
> >      <[email protected]>
> >      >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  <[email protected]> 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  <[email protected]> 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  <[email protected]>
> >      >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
> >      [email protected].
> >      >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
> > +.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/CAN%2Bi5iMEe_x9Xt5AamvnS8LXP6TYRZzD6o%3DY7Q6%3DhDOzQh%3D1dQ%40mail.gmail.com.

Reply via email to