git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commitea05c906818fa0e581e0e02f98b8ac7f9442c31b
parentb3ec851862
authorIsaac Freund <[email protected]>
date2021-07-15 22:57
rivertile: simplify commands

Instead of having separate commands for modifying/setting a value, use
the presence of a +/- sign to indicate modification.

 doc/rivertile.1.scd | 40 ++++++++++++++++++++--------------------
 example/init        | 16 ++++++++--------
 rivertile/main.zig  | 50 +++++++++++++++++++++++++-------------------------
 3 files changed, 53 insertions(+), 53 deletions(-)

diff --git a/doc/rivertile.1.scd b/doc/rivertile.1.scd
index d12a4ce..6143a31 100644
--- a/doc/rivertile.1.scd
+++ b/doc/rivertile.1.scd
@@ -33,42 +33,42 @@ modified while rivertile is running with the help of *riverctl*(1).
 	layout. (Default: 1)
 
 *-main-ratio* _ratio_
-	Set the initial ratio of main area to total layout area. The _ratio_
-	must be between 0.1 and 0.9, inclusive. (Default: 0.6)
+	Set the initial ratio of the main area to total layout area. The
+	_ratio_ must be between 0.1 and 0.9, inclusive. (Default: 0.6)
 
 # COMMANDS
 
 These commands may be sent to rivertile at runtime with the help of
 *riverctl*(1).
 
-*set-main-location* [*top*|*bottom*|*left*|*right*]
+*main-location* [*top*|*bottom*|*left*|*right*]
 	Set the location of the main area in the layout.
 
-*set-main-count* _count_
-	Set the number of views in the main area of the layout.
+*main-count* _value_
+	Set or modify the number of views in the main area of the layout. If
+	_value_ is prefixed by a +/- sign, _value_ is added/subtracted from the
+	current count. If there is no sign, the main count is set to _value_.
 
-*mod-main-count* _delta_
-	Modify the number of views in the main area of the layout by a
-	positive or negative _delta_.
+*main-count* _value_
+	Set or modify the ratio of the main area to total layout area. If
+	_value_ is prefixed by a +/- sign, _value_ is added/subtracted from
+	the current ratio. If there is no sign, the main ratio is set to
+	_value_. Note that the ratio will always be clamped to the range
+	0.1 to 0.9.
 
-*set-main-ratio* _ratio_
-	Set the ratio of main area to total layout area. The _ratio_ must
-	be between 0.1 and 0.9, inclusive.
+# EXAMPLES
 
-*mod-main-ratio* _delta_
-	Modify the ratio of main area to total layout area by a positive or
-	negative _delta_. The resulting ratio will be clamped to be between
-	0.1 and 0.9, inclusive.
+Start *rivertile* with 4 pixels outer padding and the *top* main location:
 
-# EXAMPLES
+	rivertile -outer-padding 4 -main-location top
 
-Start *rivertile* with 4 pixels outer padding and 2 main views:
+Increase the main ratio by 0.1 at runtime:
 
-	rivertile -outer-padding 4 -main-count 2
+	riverctl send-layout-cmd rivertile "main-ratio +0.1"
 
-Set the main location of rivertile to *top* at runtime:
+Set the main count to 3 at runtime:
 
-	riverctl send-layout-cmd rivertile "set-main-location top"
+	riverctl send-layout-cmd rivertile "main-count 3"
 
 # AUTHORS
 
diff --git a/example/init b/example/init
index 886beae..ae85914 100755
--- a/example/init
+++ b/example/init
@@ -41,12 +41,12 @@ riverctl map normal $mod+Shift Comma send-to-output previous
 riverctl map normal $mod Return zoom
 
 # Mod+H and Mod+L to decrease/increase the main ratio of rivertile(1)
-riverctl map normal $mod H send-layout-cmd rivertile "mod-main-ratio -0.05"
-riverctl map normal $mod L send-layout-cmd rivertile "mod-main-ratio +0.05"
+riverctl map normal $mod H send-layout-cmd rivertile "main-ratio -0.05"
+riverctl map normal $mod L send-layout-cmd rivertile "main-ratio +0.05"
 
 # Mod+Shift+H and Mod+Shift+L to increment/decrement the main count of rivertile(1)
-riverctl map normal $mod+Shift H send-layout-cmd rivertile "mod-main-count +1"
-riverctl map normal $mod+Shift L send-layout-cmd rivertile "mod-main-count -1"
+riverctl map normal $mod+Shift H send-layout-cmd rivertile "main-count +1"
+riverctl map normal $mod+Shift L send-layout-cmd rivertile "main-count -1"
 
 # Mod+Alt+{H,J,K,L} to move views
 riverctl map normal $mod+Mod1 H move left 100
@@ -102,10 +102,10 @@ riverctl map normal $mod Space toggle-float
 riverctl map normal $mod F toggle-fullscreen
 
 # Mod+{Up,Right,Down,Left} to change layout orientation
-riverctl map normal $mod Up    send-layout-cmd rivertile "set-main-location top"
-riverctl map normal $mod Right send-layout-cmd rivertile "set-main-location right"
-riverctl map normal $mod Down  send-layout-cmd rivertile "set-main-location bottom"
-riverctl map normal $mod Left  send-layout-cmd rivertile "set-main-location left"
+riverctl map normal $mod Up    send-layout-cmd rivertile "main-location top"
+riverctl map normal $mod Right send-layout-cmd rivertile "main-location right"
+riverctl map normal $mod Down  send-layout-cmd rivertile "main-location bottom"
+riverctl map normal $mod Left  send-layout-cmd rivertile "main-location left"
 
 # Declare a passthrough mode. This mode has only a single mapping to return to
 # normal mode. This makes it useful for testing a nested wayland compositor
diff --git a/rivertile/main.zig b/rivertile/main.zig
index 6600563..61eba08 100644
--- a/rivertile/main.zig
+++ b/rivertile/main.zig
@@ -65,11 +65,9 @@ const usage =
 ;
 
 const Command = enum {
-    @"set-main-location",
-    @"set-main-count",
-    @"mod-main-count",
-    @"set-main-ratio",
-    @"mod-main-ratio",
+    @"main-location",
+    @"main-count",
+    @"main-ratio",
 };
 
 const Location = enum {
@@ -159,39 +157,41 @@ const Output = struct {
                     return;
                 };
                 switch (cmd) {
-                    .@"set-main-location" => {
+                    .@"main-location" => {
                         output.main_location = std.meta.stringToEnum(Location, raw_arg) orelse {
                             std.log.err("unknown location: {s}", .{raw_arg});
                             return;
                         };
                     },
-                    .@"set-main-count" => {
-                        output.main_count = std.fmt.parseInt(u32, raw_arg, 10) catch |err| {
-                            std.log.err("failed to parse argument: {}", .{err});
-                            return;
-                        };
-                    },
-                    .@"mod-main-count" => {
+                    .@"main-count" => {
                         const arg = std.fmt.parseInt(i32, raw_arg, 10) catch |err| {
                             std.log.err("failed to parse argument: {}", .{err});
                             return;
                         };
-                        const result = math.add(i33, output.main_count, arg) catch math.maxInt(u32);
-                        if (result > 0) output.main_count = @intCast(u32, result);
-                    },
-                    .@"set-main-ratio" => {
-                        const arg = std.fmt.parseFloat(f64, raw_arg) catch |err| {
-                            std.log.err("failed to parse argument: {}", .{err});
-                            return;
-                        };
-                        output.main_ratio = math.clamp(arg, 0.1, 0.9);
+                        switch (raw_arg[0]) {
+                            '+' => output.main_count = math.add(
+                                u32,
+                                output.main_count,
+                                @intCast(u32, arg),
+                            ) catch math.maxInt(u32),
+                            '-' => {
+                                const result = @as(i33, output.main_count) + arg;
+                                if (result >= 0) output.main_count = @intCast(u32, result);
+                            },
+                            else => output.main_count = @intCast(u32, arg),
+                        }
                     },
-                    .@"mod-main-ratio" => {
+                    .@"main-ratio" => {
                         const arg = std.fmt.parseFloat(f64, raw_arg) catch |err| {
                             std.log.err("failed to parse argument: {}", .{err});
                             return;
                         };
-                        output.main_ratio = math.clamp(output.main_ratio + arg, 0.1, 0.9);
+                        switch (raw_arg[0]) {
+                            '+', '-' => {
+                                output.main_ratio = math.clamp(output.main_ratio + arg, 0.1, 0.9);
+                            },
+                            else => output.main_ratio = math.clamp(arg, 0.1, 0.9),
+                        }
                     },
                 }
             },
@@ -360,7 +360,7 @@ pub fn main() !void {
     _ = try display.roundtrip();
 
     if (context.layout_manager == null) {
-        fatal("wayland compositor does not support river-layout-v2.\n", .{});
+        fatal("wayland compositor does not support river-layout-v3.\n", .{});
     }
 
     context.initialized = true;