using NozCli.Repl; using Spectre.Console; namespace NozCli.Commands; public class ConfigCommand : ICommand { public string Name => "config"; public string Description => "Show or set CLI configuration (editor, code-editor)"; public string Usage => "config [editor|code-editor] [value]"; public Task ExecuteAsync(string[] args, ReplContext ctx, CancellationToken ct = default) { var cfg = ctx.Config; if (args.Length == 0) { // Show current config var editorVal = cfg.Editor ?? "[dim](auto)[/]"; var codeEditorVal = cfg.CodeEditor ?? "[dim](auto)[/]"; AnsiConsole.WriteLine(); AnsiConsole.MarkupLine($" [dim grey]editor[/] {editorVal}"); AnsiConsole.MarkupLine($" [dim grey]code-editor[/] {codeEditorVal}"); AnsiConsole.MarkupLine($" [dim grey]server[/] {cfg.ServerUrl}"); AnsiConsole.WriteLine(); AnsiConsole.MarkupLine("[dim]Set with: config editor [/]"); AnsiConsole.MarkupLine("[dim] config code-editor [/]"); AnsiConsole.WriteLine(); return Task.CompletedTask; } var key = args[0].ToLowerInvariant(); var value = args.Length > 1 ? args[1] : null; if (value is null) { AnsiConsole.MarkupLine($"[red]Usage: config {key} [/]"); return Task.CompletedTask; } switch (key) { case "editor": cfg.Editor = value; cfg.Save(); AnsiConsole.MarkupLine($"[green]✓[/] editor → [white]{value}[/]"); break; case "code-editor": case "codeeditor": cfg.CodeEditor = value; cfg.Save(); AnsiConsole.MarkupLine($"[green]✓[/] code-editor → [white]{value}[/]"); break; default: AnsiConsole.MarkupLine($"[red]Unknown key:[/] {key} [dim](editor, code-editor)[/]"); break; } return Task.CompletedTask; } }