aboutsummaryrefslogtreecommitdiff
path: root/riverctl/options.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2021-02-02 18:42:09 +0100
committerIsaac Freund <ifreund@ifreund.xyz>2021-02-02 18:42:09 +0100
commit96d460c477635925b77c9cfd27528009914dadbc (patch)
treed503a15447b3c926396b51751e992c159a7fc963 /riverctl/options.zig
parent1834bd4bd033bee4373cf805f7790ad356e91083 (diff)
downloadriver-96d460c477635925b77c9cfd27528009914dadbc.tar.gz
river-96d460c477635925b77c9cfd27528009914dadbc.tar.xz
riverctl: improve handling of null string options
Passing an empty string as the value argument for riverctl set-option or declare-option will set the value to null. The riverctl get-option command produces no output for both null and empty string values. This is not perfect as it is unable to distinguish between null and empty strings through the riverctl CLI. I don't see a better alternative here however. Forbidding null strings in the river-options protocol would be one solution, however null strings are useful and more pleasant to use from code despite being problematic on the CLI.
Diffstat (limited to 'riverctl/options.zig')
-rw-r--r--riverctl/options.zig6
1 files changed, 3 insertions, 3 deletions
diff --git a/riverctl/options.zig b/riverctl/options.zig
index 99e0be5..41e3223 100644
--- a/riverctl/options.zig
+++ b/riverctl/options.zig
@@ -63,7 +63,7 @@ pub fn declareOption(display: *wl.Display, globals: *Globals) !void {
.int => setIntValueRaw(handle, raw_value),
.uint => setUintValueRaw(handle, raw_value),
.fixed => setFixedValueRaw(handle, raw_value),
- .string => handle.setStringValue(raw_value),
+ .string => handle.setStringValue(if (raw_value[0] == 0) null else raw_value),
}
_ = display.flush() catch os.exit(1);
}
@@ -156,7 +156,7 @@ fn getOptionListener(
.int_value => |ev| printOutputExit("{}", .{ev.value}),
.uint_value => |ev| printOutputExit("{}", .{ev.value}),
.fixed_value => |ev| printOutputExit("{d}", .{ev.value.toDouble()}),
- .string_value => |ev| printOutputExit("{}", .{ev.value}),
+ .string_value => |ev| if (ev.value) |s| printOutputExit("{}", .{s}) else os.exit(0),
}
}
@@ -180,7 +180,7 @@ fn setOptionListener(
.int_value => |ev| setIntValueRaw(handle, ctx.raw_value),
.uint_value => |ev| setUintValueRaw(handle, ctx.raw_value),
.fixed_value => |ev| setFixedValueRaw(handle, ctx.raw_value),
- .string_value => |ev| handle.setStringValue(ctx.raw_value),
+ .string_value => |ev| handle.setStringValue(if (ctx.raw_value[0] == 0) null else ctx.raw_value),
}
_ = ctx.display.flush() catch os.exit(1);
os.exit(0);