input: Binding.Trigger format

This commit is contained in:
Mitchell Hashimoto
2023-11-03 17:48:19 -07:00
parent cb4bb8aaf6
commit debeba99db
2 changed files with 22 additions and 31 deletions

View File

@ -57,40 +57,10 @@ fn listDefaultKeybinds(alloc: Allocator) !u8 {
}
fn iterConfig(stdout: anytype, iter: anytype) !u8 {
const start = @intFromEnum(inputpkg.Key.one);
var amount: u8 = 0;
while (iter.next()) |next| {
const keys = next.key_ptr.*;
const value = next.value_ptr.*;
try stdout.print("{}", .{value});
switch (keys.key) {
.one, .two, .three, .four, .five, .six, .seven, .eight, .nine => try stdout.print(" {d} +", .{(@intFromEnum(keys.key) - start) + 1}),
inline else => try stdout.print(" {s} +", .{@tagName(keys.key)}),
}
const fields = @typeInfo(@TypeOf(keys.mods)).Struct.fields;
inline for (fields) |field| {
switch (field.type) {
bool => {
if (@field(keys.mods, field.name)) {
if (amount >= 1) {
try stdout.print(" +", .{});
}
try stdout.print(" {s}", .{field.name});
amount += 1;
}
},
u6 => continue,
inline else => {
try stdout.print("\n", .{});
continue;
},
}
}
amount = 0;
try stdout.print("{}={}\n", .{ keys, value });
}
return 0;

View File

@ -416,6 +416,27 @@ pub const Trigger = extern struct {
std.hash.autoHash(&hasher, self.physical);
return hasher.final();
}
/// Format implementation for fmt package.
pub fn format(
self: Trigger,
comptime layout: []const u8,
opts: std.fmt.FormatOptions,
writer: anytype,
) !void {
_ = layout;
_ = opts;
// Modifiers first
if (self.mods.super) try writer.writeAll("super+");
if (self.mods.ctrl) try writer.writeAll("ctrl+");
if (self.mods.alt) try writer.writeAll("alt+");
if (self.mods.shift) try writer.writeAll("shift+");
// Key
if (self.physical) try writer.writeAll("physical:");
try writer.print("{s}", .{@tagName(self.key)});
}
};
/// A structure that contains a set of bindings and focuses on fast lookup.