From 6a2597a6d63b7bc823e8edb9d1fbdc5634876c81 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 5 Dec 2024 16:41:15 -0500 Subject: [PATCH] =?UTF-8?q?macos:=20Make=20"Settings=E2=80=A6"=20menu=20it?= =?UTF-8?q?em=20open=20config=20file=20in=20Application=20Support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...unless ~/.config/ghostty/config already exists, then that is opened. (Or whatever $XDG_CONFIG_HOME points to.) If both files exists, ghostty reads first the one in ~/.config/ghostty/config and then the one in Application Support, and merges the settings. In that case, the menu item opens the file at ~/.config. Fixes #2890. --- src/config/edit.zig | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/config/edit.zig b/src/config/edit.zig index 38d9f2b7f..e93d2a6f8 100644 --- a/src/config/edit.zig +++ b/src/config/edit.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const builtin = @import("builtin"); const Allocator = std.mem.Allocator; const internal_os = @import("../os/main.zig"); @@ -6,7 +7,21 @@ const internal_os = @import("../os/main.zig"); /// paths the main config file could be in. pub fn open(alloc_gpa: Allocator) !void { // default location - const config_path = try internal_os.xdg.config(alloc_gpa, .{ .subdir = "ghostty/config" }); + var config_path = try internal_os.xdg.config(alloc_gpa, .{ .subdir = "ghostty/config" }); + + if (comptime builtin.os.tag == .macos) { + const xdg_config_exists = if (std.fs.accessAbsolute(config_path, std.fs.File.OpenFlags{})) true else |err| switch (err) { + error.BadPathName => false, + error.FileNotFound => false, + else => true, + }; + + if (!xdg_config_exists) { + alloc_gpa.free(config_path); + config_path = try internal_os.macos.appSupportDir(alloc_gpa, "config"); + } + } + defer alloc_gpa.free(config_path); // Create config directory recursively.