noz-cli/NozCli/Commands/ConfigCommand.cs
kryptomrx 1865a7ccc2 feat(commands): clear, config, version
- clear: clears terminal screen
- config: view and set editor / code-editor preferences
- version: print version and git hash (noz 0.1.0 (abc1234))
2026-05-16 23:21:06 +02:00

64 lines
2.1 KiB
C#

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 <nano|vim|vi|notepad>[/]");
AnsiConsole.MarkupLine("[dim] config code-editor <code|zed|subl|vim>[/]");
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} <value>[/]");
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;
}
}