mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 16:56:09 +03:00
input: add Binding.Action.format to convert action to string
This commit is contained in:
@ -63,15 +63,7 @@ fn iterConfig(stdout: anytype, iter: anytype) !u8 {
|
|||||||
while (iter.next()) |next| {
|
while (iter.next()) |next| {
|
||||||
const keys = next.key_ptr.*;
|
const keys = next.key_ptr.*;
|
||||||
const value = next.value_ptr.*;
|
const value = next.value_ptr.*;
|
||||||
try stdout.print("{s}", .{@tagName(value)});
|
try stdout.print("{}", .{value});
|
||||||
switch (value) {
|
|
||||||
.goto_tab => |val| try stdout.print(" {d}:", .{val}),
|
|
||||||
.jump_to_prompt => |val| try stdout.print(" {d}:", .{val}),
|
|
||||||
.increase_font_size, .decrease_font_size => |val| try stdout.print(" {d}:", .{val}),
|
|
||||||
.goto_split => |val| try stdout.print(" {s}:", .{@tagName(val)}),
|
|
||||||
.inspector => |val| try stdout.print(" {s}:", .{@tagName(val)}),
|
|
||||||
inline else => try stdout.print(":", .{}),
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (keys.key) {
|
switch (keys.key) {
|
||||||
.one, .two, .three, .four, .five, .six, .seven, .eight, .nine => try stdout.print(" {d} +", .{(@intFromEnum(keys.key) - start) + 1}),
|
.one, .two, .three, .four, .five, .six, .seven, .eight, .nine => try stdout.print(" {d} +", .{(@intFromEnum(keys.key) - start) + 1}),
|
||||||
|
@ -303,6 +303,41 @@ pub const Action = union(enum) {
|
|||||||
return Error.InvalidAction;
|
return Error.InvalidAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Implements the formatter for the fmt package. This encodes the
|
||||||
|
/// action back into the format used by parse.
|
||||||
|
pub fn format(
|
||||||
|
self: Action,
|
||||||
|
comptime layout: []const u8,
|
||||||
|
opts: std.fmt.FormatOptions,
|
||||||
|
writer: anytype,
|
||||||
|
) !void {
|
||||||
|
_ = layout;
|
||||||
|
_ = opts;
|
||||||
|
|
||||||
|
switch (self) {
|
||||||
|
inline else => |value| {
|
||||||
|
const Value = @TypeOf(value);
|
||||||
|
const value_info = @typeInfo(Value);
|
||||||
|
|
||||||
|
// All actions start with the tag.
|
||||||
|
try writer.print("{s}", .{@tagName(self)});
|
||||||
|
|
||||||
|
// Write the value depending on the type
|
||||||
|
switch (Value) {
|
||||||
|
void => {},
|
||||||
|
[]const u8 => try writer.print(":{s}", .{value}),
|
||||||
|
else => switch (value_info) {
|
||||||
|
.Enum => try writer.print(":{s}", .{@tagName(value)}),
|
||||||
|
.Float => try writer.print(":{d}", .{value}),
|
||||||
|
.Int => try writer.print(":{d}", .{value}),
|
||||||
|
.Struct => try writer.print("{} (not configurable)", .{value}),
|
||||||
|
else => @compileError("unhandled type: " ++ @typeName(Value)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns a hash code that can be used to uniquely identify this
|
/// Returns a hash code that can be used to uniquely identify this
|
||||||
/// action.
|
/// action.
|
||||||
pub fn hash(self: Action) u64 {
|
pub fn hash(self: Action) u64 {
|
||||||
|
Reference in New Issue
Block a user