summaryrefslogtreecommitdiff
path: root/src/builtins.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/builtins.zig')
-rw-r--r--src/builtins.zig15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/builtins.zig b/src/builtins.zig
index 39d70e5d..aa2b2d6d 100644
--- a/src/builtins.zig
+++ b/src/builtins.zig
@@ -137,6 +137,14 @@ pub const registry = struct {
unreachable;
}
+ /// Does this builtin say its own name on the message row before it runs?
+ /// The ones that own that row themselves declare `quiet` and do not.
+ pub fn announces(b: Builtin()) bool {
+ inline for (manualBuiltinList(), 0..) |T, i|
+ if (@intFromEnum(b) == i) return !(@hasDecl(T, "quiet") and T.quiet);
+ return true; // a setting builtin changes something invisible; say so
+ }
+
pub fn dispatch(b: Builtin(), c: Ctx) void {
inline for (manualBuiltinList(), 0..) |T, i|
if (@intFromEnum(b) == i) return T.run(c);
@@ -259,6 +267,7 @@ pub const Unmount = struct {
pub const Msg = struct {
pub const takes_arg = true;
+ pub const quiet = true; // it IS the message row
pub fn run(c: Ctx) void {
if (c.arg) |text|
c.p.setMessage(c.id, text)
@@ -542,11 +551,15 @@ pub const LocationsConfig = struct {
pub const output: OutputTraits = .{ .name = "+LocationsConfig" };
pub fn run(c: Ctx) void {
- const next = c.p.locations_config.parse(c.arg orelse "") catch |err| {
+ const argument = std.mem.trim(u8, c.arg orelse "", " \t\r\n");
+ const next = c.p.locations_config.parse(argument) catch |err| {
c.p.reportError(c.id, "LocationsConfig", err);
return;
};
c.p.locations_config = next;
+ // Bare, it is a question, and the window is the answer. With arguments
+ // it is a setting, and a setting that opens a window is noise.
+ if (argument.len != 0) return;
report(c) catch |err| c.p.reportError(c.id, "LocationsConfig", err);
}