From aced6daa198d22d32ead71eec097321fd2b279de Mon Sep 17 00:00:00 2001 From: Zandr Martin Date: Sun, 3 Jul 2016 07:05:10 -0500 Subject: match i3 syntax for `resize set` --- sway/commands.c | 52 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 9 deletions(-) (limited to 'sway/commands.c') diff --git a/sway/commands.c b/sway/commands.c index 55f46f79..625f8276 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -83,6 +83,7 @@ static sway_cmd cmd_orientation; static sway_cmd cmd_output; static sway_cmd cmd_reload; static sway_cmd cmd_resize; +static sway_cmd cmd_resize_set; static sway_cmd cmd_scratchpad; static sway_cmd cmd_set; static sway_cmd cmd_smart_gaps; @@ -2000,6 +2001,11 @@ static struct cmd_results *cmd_resize(int argc, char **argv) { struct cmd_results *error = NULL; if (config->reading) return cmd_results_new(CMD_FAILURE, "resize", "Can't be used in config file."); if (!config->active) return cmd_results_new(CMD_FAILURE, "resize", "Can only be used when sway is running."); + + if (strcasecmp(argv[0], "set") == 0) { + return cmd_resize_set(argc - 1, &argv[1]); + } + if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 2))) { return error; } @@ -2010,26 +2016,54 @@ static struct cmd_results *cmd_resize(int argc, char **argv) { return cmd_results_new(CMD_INVALID, "resize", "Number is out of range."); } - if (strcmp(argv[0], "shrink") == 0 || strcmp(argv[0], "grow") == 0) { - if (strcmp(argv[0], "shrink") == 0) { + + if (strcasecmp(argv[0], "shrink") == 0 || strcmp(argv[0], "grow") == 0) { + if (strcasecmp(argv[0], "shrink") == 0) { amount *= -1; } - if (strcmp(argv[1], "width") == 0) { + if (strcasecmp(argv[1], "width") == 0) { resize_tiled(amount, true); } else if (strcmp(argv[1], "height") == 0) { resize_tiled(amount, false); } else { return cmd_results_new(CMD_INVALID, "resize", - "Expected 'resize ' or 'resize '"); + "Expected 'resize '"); } - } else if (strcmp(argv[0], "width") == 0) { - set_size_tiled(amount, true); - } else if (strcmp(argv[0], "height") == 0) { - set_size_tiled(amount, false); } else { return cmd_results_new(CMD_INVALID, "resize", - "Expected 'resize ' or 'resize '"); + "Expected 'resize '"); + } + + return cmd_results_new(CMD_SUCCESS, NULL, NULL); +} + +static struct cmd_results *cmd_resize_set(int argc, char **argv) { + struct cmd_results *error = NULL; + if ((error = checkarg(argc, "resize set", EXPECTED_AT_LEAST, 2))) { + return error; + } + + int cmd_num = 0; + int amount; + + while (cmd_num < argc) { + amount = (int)strtol(argv[cmd_num + 1], NULL, 10); + if (errno == ERANGE || amount == 0) { + errno = 0; + return cmd_results_new(CMD_INVALID, "resize set", "Number is out of range."); + } + + if (strcasecmp(argv[cmd_num], "width") == 0) { + set_size_tiled(amount, true); + } else if (strcasecmp(argv[cmd_num], "height") == 0) { + set_size_tiled(amount, false); + } else { + return cmd_results_new(CMD_INVALID, "resize", + "Expected 'resize set [ ]'"); + } + + cmd_num += 2; } return cmd_results_new(CMD_SUCCESS, NULL, NULL); -- cgit v1.2.3 From d5e4fff34544deda97f9f7d26eb1cb391fcc86bf Mon Sep 17 00:00:00 2001 From: Zandr Martin Date: Sun, 3 Jul 2016 12:11:21 -0500 Subject: resize command updates (#713) --- sway/commands.c | 105 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 31 deletions(-) (limited to 'sway/commands.c') diff --git a/sway/commands.c b/sway/commands.c index 625f8276..2248e1c7 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -2010,31 +2010,41 @@ static struct cmd_results *cmd_resize(int argc, char **argv) { return error; } - int amount = (int)strtol(argv[argc - 1], NULL, 10); + int dim_arg = argc - 1; + + enum resize_dim_types dim_type = RESIZE_DIM_DEFAULT; + if (strcasecmp(argv[dim_arg], "ppt") == 0) { + dim_type = RESIZE_DIM_PPT; + dim_arg--; + } else if (strcasecmp(argv[dim_arg], "px") == 0) { + dim_type = RESIZE_DIM_PX; + dim_arg--; + } + + int amount = (int)strtol(argv[dim_arg], NULL, 10); if (errno == ERANGE || amount == 0) { errno = 0; - return cmd_results_new(CMD_INVALID, "resize", "Number is out of range."); + amount = 10; // this is the default resize dimension used by i3 for both px and ppt + sway_log(L_DEBUG, "Tried to get resize dimension out of '%s' but failed; setting dimension to default %d", + argv[dim_arg], amount); } + bool use_width = false; + if (strcasecmp(argv[1], "width") == 0) { + use_width = true; + } else if (strcasecmp(argv[1], "height") != 0) { + return cmd_results_new(CMD_INVALID, "resize", + "Expected 'resize [] [px|ppt]'"); + } - if (strcasecmp(argv[0], "shrink") == 0 || strcmp(argv[0], "grow") == 0) { - if (strcasecmp(argv[0], "shrink") == 0) { - amount *= -1; - } - - if (strcasecmp(argv[1], "width") == 0) { - resize_tiled(amount, true); - } else if (strcmp(argv[1], "height") == 0) { - resize_tiled(amount, false); - } else { - return cmd_results_new(CMD_INVALID, "resize", - "Expected 'resize '"); - } - } else { + if (strcasecmp(argv[0], "shrink") == 0) { + amount *= -1; + } else if (strcasecmp(argv[0], "grow") != 0) { return cmd_results_new(CMD_INVALID, "resize", - "Expected 'resize '"); + "Expected 'resize [] [px|ppt]'"); } + resize(amount, use_width, dim_type); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } @@ -2044,26 +2054,59 @@ static struct cmd_results *cmd_resize_set(int argc, char **argv) { return error; } - int cmd_num = 0; - int amount; + if (strcasecmp(argv[0], "width") == 0 || strcasecmp(argv[0], "height") == 0) { + // handle `reset set width 100 px height 100 px` syntax, also allows + // specifying only one dimension for a `resize set` + int cmd_num = 0; + int dim; + + while ((cmd_num + 1) < argc) { + dim = (int)strtol(argv[cmd_num + 1], NULL, 10); + if (errno == ERANGE || dim == 0) { + errno = 0; + return cmd_results_new(CMD_INVALID, "resize set", + "Expected 'resize set [px] [ [px]]'"); + } + + if (strcasecmp(argv[cmd_num], "width") == 0) { + set_size(dim, true); + } else if (strcasecmp(argv[cmd_num], "height") == 0) { + set_size(dim, false); + } else { + return cmd_results_new(CMD_INVALID, "resize set", + "Expected 'resize set [px] [ [px]]'"); + } + + cmd_num += 2; - while (cmd_num < argc) { - amount = (int)strtol(argv[cmd_num + 1], NULL, 10); - if (errno == ERANGE || amount == 0) { + if (cmd_num < argc && strcasecmp(argv[cmd_num], "px") == 0) { + // if this was `resize set width 400 px height 300 px`, disregard the `px` arg + cmd_num++; + } + } + } else { + // handle `reset set 100 px 100 px` syntax + int width = (int)strtol(argv[0], NULL, 10); + if (errno == ERANGE || width == 0) { errno = 0; - return cmd_results_new(CMD_INVALID, "resize set", "Number is out of range."); + return cmd_results_new(CMD_INVALID, "resize set", + "Expected 'resize set [px] [px]'"); } - if (strcasecmp(argv[cmd_num], "width") == 0) { - set_size_tiled(amount, true); - } else if (strcasecmp(argv[cmd_num], "height") == 0) { - set_size_tiled(amount, false); - } else { - return cmd_results_new(CMD_INVALID, "resize", - "Expected 'resize set [ ]'"); + int height_arg = 1; + if (strcasecmp(argv[1], "px") == 0) { + height_arg = 2; + } + + int height = (int)strtol(argv[height_arg], NULL, 10); + if (errno == ERANGE || height == 0) { + errno = 0; + return cmd_results_new(CMD_INVALID, "resize set", + "Expected 'resize set [px] [px]'"); } - cmd_num += 2; + set_size(width, true); + set_size(height, false); } return cmd_results_new(CMD_SUCCESS, NULL, NULL); -- cgit v1.2.3