Merge pull request #3090 from RedSoxFan/resize-set-improved

resize set: implement width and height keywords
This commit is contained in:
Drew DeVault 2018-11-08 14:39:20 -05:00 committed by GitHub
commit 5880478fb1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 23 deletions

View file

@ -499,7 +499,7 @@ static struct cmd_results *resize_set_tiled(struct sway_container *con,
} }
if (height->unit == RESIZE_UNIT_PX) { if (height->unit == RESIZE_UNIT_PX) {
resize_tiled(con, height->amount - con->height, resize_tiled(con, height->amount - con->height,
RESIZE_AXIS_HORIZONTAL); RESIZE_AXIS_VERTICAL);
} }
} }
@ -538,34 +538,45 @@ static struct cmd_results *resize_set_floating(struct sway_container *con,
/** /**
* resize set <args> * resize set <args>
* *
* args: <width> [px|ppt] <height> [px|ppt] * args: [width] <width> [px|ppt]
* : height <height> [px|ppt]
* : [width] <width> [px|ppt] [height] <height> [px|ppt]
*/ */
static struct cmd_results *cmd_resize_set(int argc, char **argv) { static struct cmd_results *cmd_resize_set(int argc, char **argv) {
struct cmd_results *error; struct cmd_results *error;
if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 2))) { if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 1))) {
return error; return error;
} }
const char *usage = "Expected 'resize set <width> <height>'"; const char *usage = "Expected 'resize set [width] <width> [px|ppt]' or "
"'resize set height <height> [px|ppt]' or "
"'resize set [width] <width> [px|ppt] [height] <height> [px|ppt]'";
// Width // Width
struct resize_amount width; struct resize_amount width = {0};
if (argc >= 2 && !strcmp(argv[0], "width") && strcmp(argv[1], "height")) {
argc--; argv++;
}
if (strcmp(argv[0], "height")) {
int num_consumed_args = parse_resize_amount(argc, argv, &width); int num_consumed_args = parse_resize_amount(argc, argv, &width);
argc -= num_consumed_args; argc -= num_consumed_args;
argv += num_consumed_args; argv += num_consumed_args;
if (width.unit == RESIZE_UNIT_INVALID) { if (width.unit == RESIZE_UNIT_INVALID) {
return cmd_results_new(CMD_INVALID, "resize", usage); return cmd_results_new(CMD_INVALID, "resize set", usage);
} }
if (!argc) {
return cmd_results_new(CMD_INVALID, "resize", usage);
} }
// Height // Height
struct resize_amount height; struct resize_amount height = {0};
num_consumed_args = parse_resize_amount(argc, argv, &height); if (argc) {
if (argc >= 2 && !strcmp(argv[0], "height")) {
argc--; argv++;
}
int num_consumed_args = parse_resize_amount(argc, argv, &height);
argc -= num_consumed_args; argc -= num_consumed_args;
argv += num_consumed_args; argv += num_consumed_args;
if (height.unit == RESIZE_UNIT_INVALID) { if (width.unit == RESIZE_UNIT_INVALID) {
return cmd_results_new(CMD_INVALID, "resize", usage); return cmd_results_new(CMD_INVALID, "resize set", usage);
}
} }
// If 0, don't resize that dimension // If 0, don't resize that dimension

View file

@ -210,11 +210,23 @@ set|plus|minus <amount>
percentage points. If the units are omitted, floating containers are resized percentage points. If the units are omitted, floating containers are resized
in px and tiled containers by ppt. _amount_ will default to 10 if omitted. in px and tiled containers by ppt. _amount_ will default to 10 if omitted.
*resize set* <width> [px|ppt] <height> [px|ppt] *resize set* height <height> [px|ppt]
Sets the width and height of the currently focused container to _width_ and Sets the height of the container to _height_, specified in pixels or
_height_, specified in pixels or percentage points. If the units are percentage points. If the units are omitted, floating containers are
omitted, floating containers are resized in px and tiled containers by ppt. resized in px and tiled containers by ppt. If _height_ is 0, the container
If _width_ or _height_ is 0, no resize is done on that axis. will not be resized.
*resize set* [width] <width> [px|ppt]
Sets the width of the container to _width_, specified in pixels or
percentage points. If the units are omitted, floating containers are
resized in px and tiled containers by ppt. If _width_ is 0, the container
will not be resized.
*resize set* [width] <width> [px|ppt] [height] <height> [px|ppt]
Sets the width and height of the container to _width_ and _height_,
specified in pixels or percentage points. If the units are omitted,
floating containers are resized in px and tiled containers by ppt. If
_width_ or _height_ is 0, the container will not be resized on that axis.
*scratchpad show* *scratchpad show*
Shows a window from the scratchpad. Repeatedly using this command will Shows a window from the scratchpad. Repeatedly using this command will