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:
> > 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/CAN%2Bi5iPZhB-dKPqbOU2nurTrgu0FjFU9ZzR5GEi02xzkrAur0Q%40mail.gmail.com.
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 ,