aboutsummaryrefslogtreecommitdiff
path: root/rivertile
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2021-07-24 18:29:48 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2021-07-24 18:29:48 +0200
commita5a505ecbaecacbc79c515daf55ea55ab8e475f0 (patch)
treef180e17aefba9f5d95ca080c4b47b8859ce265aa /rivertile
parentf6fa3425de1efb16cc2b7967eb6420afac4fdab4 (diff)
downloadriver-a5a505ecbaecacbc79c515daf55ea55ab8e475f0.tar.gz
river-a5a505ecbaecacbc79c515daf55ea55ab8e475f0.tar.xz
common: remove support for positional arguments
This is currently unused and I don't like the approach anymore regardless. If/when we need positional arguments (probably when implementing the upcoming river-control protocol in rivertile) they should be handled separately from flags. This commit also improves the CLI error reporting to always print the usage string if invalid arguments were passed.
Diffstat (limited to 'rivertile')
-rw-r--r--rivertile/main.zig59
1 files changed, 34 insertions, 25 deletions
diff --git a/rivertile/main.zig b/rivertile/main.zig
index cc977b4..59a0f6e 100644
--- a/rivertile/main.zig
+++ b/rivertile/main.zig
@@ -39,17 +39,17 @@
const std = @import("std");
const mem = std.mem;
const math = std.math;
+const os = std.os;
const assert = std.debug.assert;
const wayland = @import("wayland");
const wl = wayland.client.wl;
const river = wayland.client.river;
-const Args = @import("args").Args;
-const FlagDef = @import("args").FlagDef;
+const flags = @import("flags");
const usage =
- \\Usage: rivertile [options]
+ \\usage: rivertile [options]
\\
\\ -h, --help Print this help message and exit.
\\ -version Print the version number and exit.
@@ -312,8 +312,8 @@ const Output = struct {
pub fn main() !void {
// https://github.com/ziglang/zig/issues/7807
- const argv: [][*:0]const u8 = std.os.argv;
- const args = Args(0, &[_]FlagDef{
+ const argv: [][*:0]const u8 = os.argv;
+ const result = flags.parse(argv[1..], &[_]flags.Flag{
.{ .name = "-h", .kind = .boolean },
.{ .name = "--help", .kind = .boolean },
.{ .name = "-version", .kind = .boolean },
@@ -322,40 +322,44 @@ pub fn main() !void {
.{ .name = "-main-location", .kind = .arg },
.{ .name = "-main-count", .kind = .arg },
.{ .name = "-main-ratio", .kind = .arg },
- }).parse(argv[1..]);
+ }) catch {
+ try std.io.getStdErr().writeAll(usage);
+ os.exit(1);
+ };
+ if (result.args.len != 0) fatalPrintUsage("unknown option '{s}'", .{result.args[0]});
- if (args.boolFlag("-h") or args.boolFlag("--help")) {
+ if (result.boolFlag("-h") or result.boolFlag("--help")) {
try std.io.getStdOut().writeAll(usage);
- std.os.exit(0);
+ os.exit(0);
}
- if (args.boolFlag("-version")) {
+ if (result.boolFlag("-version")) {
try std.io.getStdOut().writeAll(@import("build_options").version);
- std.os.exit(0);
+ os.exit(0);
}
- if (args.argFlag("-view-padding")) |raw| {
+ if (result.argFlag("-view-padding")) |raw| {
view_padding = std.fmt.parseUnsigned(u32, mem.span(raw), 10) catch
- fatal("invalid value '{s}' provided to -view-padding", .{raw});
+ fatalPrintUsage("invalid value '{s}' provided to -view-padding", .{raw});
}
- if (args.argFlag("-outer-padding")) |raw| {
+ if (result.argFlag("-outer-padding")) |raw| {
outer_padding = std.fmt.parseUnsigned(u32, mem.span(raw), 10) catch
- fatal("invalid value '{s}' provided to -outer-padding", .{raw});
+ fatalPrintUsage("invalid value '{s}' provided to -outer-padding", .{raw});
}
- if (args.argFlag("-main-location")) |raw| {
+ if (result.argFlag("-main-location")) |raw| {
default_main_location = std.meta.stringToEnum(Location, mem.span(raw)) orelse
- fatal("invalid value '{s}' provided to -main-location", .{raw});
+ fatalPrintUsage("invalid value '{s}' provided to -main-location", .{raw});
}
- if (args.argFlag("-main-count")) |raw| {
+ if (result.argFlag("-main-count")) |raw| {
default_main_count = std.fmt.parseUnsigned(u32, mem.span(raw), 10) catch
- fatal("invalid value '{s}' provided to -main-count", .{raw});
+ fatalPrintUsage("invalid value '{s}' provided to -main-count", .{raw});
}
- if (args.argFlag("-main-ratio")) |raw| {
+ if (result.argFlag("-main-ratio")) |raw| {
default_main_ratio = std.fmt.parseFloat(f64, mem.span(raw)) catch
- fatal("invalid value '{s}' provided to -main-ratio", .{raw});
+ fatalPrintUsage("invalid value '{s}' provided to -main-ratio", .{raw});
}
const display = wl.Display.connect(null) catch {
std.debug.warn("Unable to connect to Wayland server.\n", .{});
- std.os.exit(1);
+ os.exit(1);
};
defer display.disconnect();
@@ -404,8 +408,13 @@ fn registryListener(registry: *wl.Registry, event: wl.Registry.Event, context: *
}
}
-pub fn fatal(comptime format: []const u8, args: anytype) noreturn {
- const stderr = std.io.getStdErr().writer();
- stderr.print("err: " ++ format ++ "\n", args) catch {};
- std.os.exit(1);
+fn fatal(comptime format: []const u8, args: anytype) noreturn {
+ std.log.err(format, args);
+ os.exit(1);
+}
+
+fn fatalPrintUsage(comptime format: []const u8, args: anytype) noreturn {
+ std.log.err(format, args);
+ std.io.getStdErr().writeAll(usage) catch {};
+ os.exit(1);
}