feat: add status bar widget parameter support with parameters for linenumber and spacer widgets

linenumber widgets may have three parameters: pad width (int), pad value (space/zero) and
digit style (ascii/digital/subscript/superscript). eg `5,zero,digital`

spacers may have one parameter: width (int)
This commit is contained in:
CJ van den Berg 2025-03-25 20:50:11 +01:00
parent 0e72a714dc
commit aa568dfd5e
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
14 changed files with 80 additions and 18 deletions

View file

@ -21,16 +21,24 @@ const widgets = std.static_string_map.StaticStringMap(CreateFunction).initCompti
.{ "tabs", @import("tabs.zig").create },
});
pub const CreateError = error{ OutOfMemory, WidgetInitFailed };
pub const CreateFunction = *const fn (allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!Widget;
pub const CreateFunction = *const fn (allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler, arg: ?[]const u8) CreateError!Widget;
pub fn create(descriptor: []const u8, allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!?Widget {
var it = std.mem.splitScalar(u8, descriptor, ':');
const name = it.next() orelse {
const logger = log.logger("statusbar");
logger.print_err("config", "bad widget descriptor \"{s}\" (see log)", .{descriptor});
return null;
};
const arg = it.next();
pub fn create(name: []const u8, allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!?Widget {
const create_ = widgets.get(name) orelse {
const logger = log.logger("statusbar");
logger.print_err("config", "unknown widget \"{s}\" (see log)", .{name});
log_widgets(logger);
return null;
};
return try create_(allocator, parent, event_handler);
return try create_(allocator, parent, event_handler, arg);
}
fn log_widgets(logger: anytype) void {