From 1d000e566633bc9fd3de1e3ef4de316623798008 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Thu, 15 Jul 2021 22:57:50 +0200 Subject: [PATCH] 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 | 42 ++++++++++++++++++------------------- example/init | 16 +++++++-------- rivertile/main.zig | 50 ++++++++++++++++++++++----------------------- 3 files changed, 54 insertions(+), 54 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_. - -*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. - -*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. +*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. # EXAMPLES -Start *rivertile* with 4 pixels outer padding and 2 main views: +Start *rivertile* with 4 pixels outer padding and the *top* main location: - rivertile -outer-padding 4 -main-count 2 + rivertile -outer-padding 4 -main-location top -Set the main location of rivertile to *top* at runtime: +Increase the main ratio by 0.1 at runtime: - riverctl send-layout-cmd rivertile "set-main-location top" + riverctl send-layout-cmd rivertile "main-ratio +0.1" + +Set the main count to 3 at runtime: + + 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); + 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), + } }, - .@"set-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(arg, 0.1, 0.9); - }, - .@"mod-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;