mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-19 02:06:20 +03:00
84 lines
2.8 KiB
Zig
84 lines
2.8 KiB
Zig
const std = @import("std");
|
|
const args = @import("args.zig");
|
|
const Allocator = std.mem.Allocator;
|
|
const Action = @import("action.zig").Action;
|
|
const configpkg = @import("../config.zig");
|
|
const Config = configpkg.Config;
|
|
|
|
pub const Options = struct {
|
|
/// If true, do not load the user configuration, only load the defaults.
|
|
default: bool = false,
|
|
|
|
/// Only show the options that have been changed from the default.
|
|
/// This has no effect if `--default` is specified.
|
|
@"changes-only": bool = true,
|
|
|
|
/// If true print the documentation above each option as a comment,
|
|
/// if available.
|
|
docs: bool = false,
|
|
|
|
pub fn deinit(self: Options) void {
|
|
_ = self;
|
|
}
|
|
|
|
/// Enables `-h` and `--help` to work.
|
|
pub fn help(self: Options) !void {
|
|
_ = self;
|
|
return Action.help_error;
|
|
}
|
|
};
|
|
|
|
/// The `show-config` command shows the current configuration in a valid Ghostty
|
|
/// configuration file format.
|
|
///
|
|
/// When executed without any arguments this will output the current
|
|
/// configuration that is different from the default configuration. If you're
|
|
/// using the default configuration this will output nothing.
|
|
///
|
|
/// If you are a new user and want to see all available options with
|
|
/// documentation, run `ghostty +show-config --default --docs`.
|
|
///
|
|
/// The output is not in any specific order, but the order should be consistent
|
|
/// between runs. The output is not guaranteed to be exactly match the input
|
|
/// configuration files, but it will result in the same behavior. Comments,
|
|
/// whitespace, and other formatting is not preserved from user configuration
|
|
/// files.
|
|
///
|
|
/// Flags:
|
|
///
|
|
/// * `--default`: Show the default configuration instead of loading
|
|
/// the user configuration.
|
|
///
|
|
/// * `--changes-only`: Only show the options that have been changed
|
|
/// from the default. This has no effect if `--default` is specified.
|
|
///
|
|
/// * `--docs`: Print the documentation above each option as a comment,
|
|
/// This is very noisy but is very useful to learn about available
|
|
/// options, especially paired with `--default`.
|
|
pub fn run(alloc: Allocator) !u8 {
|
|
var opts: Options = .{};
|
|
defer opts.deinit();
|
|
|
|
{
|
|
var iter = try std.process.argsWithAllocator(alloc);
|
|
defer iter.deinit();
|
|
try args.parse(Options, alloc, &opts, &iter);
|
|
}
|
|
|
|
var config = if (opts.default) try Config.default(alloc) else try Config.load(alloc);
|
|
defer config.deinit();
|
|
|
|
const configfmt: configpkg.FileFormatter = .{
|
|
.alloc = alloc,
|
|
.config = &config,
|
|
.changed = !opts.default and opts.@"changes-only",
|
|
.docs = opts.docs,
|
|
};
|
|
|
|
// For some reason `std.fmt.format` isn't working here but it works in
|
|
// tests so we just do configfmt.format.
|
|
const stdout = std.io.getStdOut().writer();
|
|
try configfmt.format("", .{}, stdout);
|
|
return 0;
|
|
}
|