]> git.sur5r.net Git - i3/i3/commitdiff
resize set: accept 'width' and 'height' keywords 3277/head
authorOrestis Floros <orestisf1993@gmail.com>
Wed, 2 May 2018 15:59:17 +0000 (18:59 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Wed, 2 May 2018 16:02:38 +0000 (19:02 +0300)
Fixes #3275

docs/userguide
parser-specs/commands.spec
src/commands.c
testcases/t/252-floating-size.t
testcases/t/541-resize-set-tiling.t

index e82403900374d50aadd57103c3c35b68e163c061..a8b35f3e5c6a7992c5475bc43086405120a8977d 100644 (file)
@@ -2320,7 +2320,9 @@ If you want to resize containers/windows using your keyboard, you can use the
 *Syntax*:
 -------------------------------------------------------
 resize grow|shrink <direction> [<px> px [or <ppt> ppt]]
-resize set <width> [px | ppt] <height> [px | ppt]
+resize set [width] <width> [px | ppt]
+resize set height <height> [px | ppt]
+resize set [width] <width> [px | ppt] [height] <height> [px | ppt]
 -------------------------------------------------------
 
 Direction can either be one of +up+, +down+, +left+ or +right+. Or you can be
index 106dac9909a448c2c8704f3fb91f55cd0a0f2d22..c0c32933c3a0f69c2fdde5fbe4b2933e757d0660 100644 (file)
@@ -254,12 +254,24 @@ state RESIZE_TILING_FINAL:
       -> call cmd_resize($way, $direction, &resize_px, &resize_ppt)
 
 state RESIZE_SET:
+  'height'
+      -> RESIZE_HEIGHT_GET_NUMBER
+  'width'
+      ->
   width = number
       -> RESIZE_WIDTH
 
 state RESIZE_WIDTH:
   mode_width = 'px', 'ppt'
       ->
+  end
+      -> call cmd_resize_set(&width, $mode_width, 0, 0)
+  'height'
+      -> RESIZE_HEIGHT_GET_NUMBER
+  height = number
+      -> RESIZE_HEIGHT
+
+state RESIZE_HEIGHT_GET_NUMBER:
   height = number
       -> RESIZE_HEIGHT
 
index 2d5ef362e2458efc130474c02caa5eb69316fafc..c7b57ab3571a94f89b5ebec0b39b2d23a3f9174d 100644 (file)
@@ -686,7 +686,7 @@ void cmd_resize_set(I3_CMD, long cwidth, const char *mode_width, long cheight, c
                 }
             }
 
-            if (cheight > 0 && mode_width && strcmp(mode_width, "ppt") == 0) {
+            if (cheight > 0 && mode_height && strcmp(mode_height, "ppt") == 0) {
                 /* get the appropriate current container (skip stacked/tabbed cons) */
                 Con *target = current->con;
                 Con *dummy;
index 7875cb07ffb92f936a2dd5c843e809f786c6d0fa..5c746de9d6e25fec42febbc1a4a2522f0c9cd8d6 100644 (file)
@@ -96,4 +96,22 @@ do_test(0, 0);
 cmd 'resize set 100 ppt 0 px';
 do_test(1333, 0);
 
+################################################################################
+# Use 'width' and 'height' keywords.
+# See issue: #3275.
+################################################################################
+
+cmd 'resize set width 200 px';
+do_test(200, 0);
+
+cmd 'resize set height 200 px';
+do_test(0, 200);
+
+cmd 'resize set width 300 px height 300 px';
+do_test(300, 300);
+
+# ppt + keyword used only for height
+cmd 'resize set 100 ppt height 100 px';
+do_test(1333, 100);
+
 done_testing;
index 82267baf6c73d8c65c6b6644faef67f41150964c..fcf3267a3cc8ad5e53c84a27f3a82f2b3a83e3cf 100644 (file)
@@ -39,6 +39,14 @@ my ($nodes, $focus) = get_ws_content($tmp);
 cmp_float($nodes->[0]->{percent}, 0.25, 'left window got only 25%');
 cmp_float($nodes->[1]->{percent}, 0.75, 'right window got 75%');
 
+# Same but use the 'width' keyword.
+cmd 'resize set width 80 ppt';
+
+($nodes, $focus) = get_ws_content($tmp);
+
+cmp_float($nodes->[0]->{percent}, 0.20, 'left window got 20%');
+cmp_float($nodes->[1]->{percent}, 0.80, 'right window got 80%');
+
 ############################################################
 # resize vertically
 ############################################################
@@ -61,6 +69,13 @@ my ($nodes, $focus) = get_ws_content($tmp);
 cmp_float($nodes->[0]->{percent}, 0.25, 'top window got only 25%');
 cmp_float($nodes->[1]->{percent}, 0.75, 'bottom window got 75%');
 
+# Same but use the 'height' keyword.
+cmd 'resize set height 80 ppt';
+
+($nodes, $focus) = get_ws_content($tmp);
+
+cmp_float($nodes->[0]->{percent}, 0.20, 'top window got 20%');
+cmp_float($nodes->[1]->{percent}, 0.80, 'bottom window got 80%');
 
 ############################################################
 # resize horizontally and vertically