Adding keybind 'w' to the +list-themes TUI that would write out a file that contained themes
parent
42a38ff672
commit
fe52eb9494
|
|
@ -192,6 +192,28 @@ pub fn run(gpa_alloc: std.mem.Allocator) !u8 {
|
|||
return 0;
|
||||
}
|
||||
|
||||
fn resolveAutoThemePath(alloc: std.mem.Allocator) ![]u8 {
|
||||
const main_cfg_path = try Config.preferredDefaultFilePath(alloc);
|
||||
defer alloc.free(main_cfg_path);
|
||||
|
||||
const base_dir = std.fs.path.dirname(main_cfg_path) orelse return error.BadPathName;
|
||||
return try std.fs.path.join(alloc, &.{ base_dir, "auto", "theme.ghostty" });
|
||||
}
|
||||
|
||||
fn writeAutoThemeFile(alloc: std.mem.Allocator, theme_name: []const u8) !void {
|
||||
const auto_path = try resolveAutoThemePath(alloc);
|
||||
defer alloc.free(auto_path);
|
||||
|
||||
if (std.fs.path.dirname(auto_path)) |dir| {
|
||||
try std.fs.cwd().makePath(dir);
|
||||
}
|
||||
|
||||
var f = try std.fs.createFileAbsolute(auto_path, .{ .truncate = true });
|
||||
defer f.close();
|
||||
|
||||
try f.writer().print("theme = {s}\n", .{theme_name});
|
||||
}
|
||||
|
||||
const Event = union(enum) {
|
||||
key_press: vaxis.Key,
|
||||
mouse: vaxis.Mouse,
|
||||
|
|
@ -483,6 +505,9 @@ const Preview = struct {
|
|||
self.should_quit = true;
|
||||
if (key.matchesAny(&.{ vaxis.Key.escape, vaxis.Key.enter, vaxis.Key.kp_enter }, .{}))
|
||||
self.mode = .normal;
|
||||
if (key.matches('w', .{})) {
|
||||
self.saveSelectedTheme();
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
|
|
@ -694,7 +719,7 @@ const Preview = struct {
|
|||
.help => {
|
||||
win.hideCursor();
|
||||
const width = 60;
|
||||
const height = 20;
|
||||
const height = 22;
|
||||
const child = win.child(
|
||||
.{
|
||||
.x_off = win.width / 2 -| width / 2,
|
||||
|
|
@ -729,6 +754,7 @@ const Preview = struct {
|
|||
.{ .keys = "/", .help = "Start search." },
|
||||
.{ .keys = "^X, ^/", .help = "Clear search." },
|
||||
.{ .keys = "⏎", .help = "Save theme or close search window." },
|
||||
.{ .keys = "w", .help = "Write theme to auto config file." },
|
||||
};
|
||||
|
||||
for (key_help, 0..) |help, captured_i| {
|
||||
|
|
@ -805,6 +831,9 @@ const Preview = struct {
|
|||
try std.fmt.allocPrint(alloc, "theme = {s}", .{theme.theme}),
|
||||
"",
|
||||
"Save the configuration file and then reload it to apply the new theme.",
|
||||
"",
|
||||
"Or press 'w' to write an auto theme file.",
|
||||
"",
|
||||
"For more details on configuration and themes, visit the Ghostty documentation:",
|
||||
"",
|
||||
"https://ghostty.org/docs/config/reference",
|
||||
|
|
@ -1653,6 +1682,18 @@ const Preview = struct {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn saveSelectedTheme(self: *Preview) void {
|
||||
if (self.filtered.items.len == 0)
|
||||
return;
|
||||
|
||||
const idx = self.filtered.items[self.current];
|
||||
const theme = self.themes[idx];
|
||||
|
||||
writeAutoThemeFile(self.allocator, theme.theme) catch {
|
||||
return;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
fn color(config: Config, palette: usize) vaxis.Color {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,13 @@
|
|||
# reloaded while running; some only apply to new windows and others may require
|
||||
# a full restart to take effect.
|
||||
|
||||
# Auto theme include
|
||||
# ==================
|
||||
# This include makes it easy to pick a theme via `ghostty +list-themes`:
|
||||
# press Enter on a theme, then 'w' to write the auto theme file.
|
||||
# This path is relative to this config file.
|
||||
config-file = ?auto/theme.ghostty
|
||||
|
||||
# Config syntax crash course
|
||||
# ==========================
|
||||
# # The config file consists of simple key-value pairs,
|
||||
|
|
|
|||
Loading…
Reference in New Issue