Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le app che usano System.CommandLine hanno il supporto predefinito per il completamento delle schede in determinate shell. Per abilitarla, l'utente finale deve eseguire alcuni passaggi una volta per ogni shell. Al termine, il completamento della scheda è automatico per i valori statici nell'app, ad esempio valori di enumerazione o valori definiti chiamando AcceptOnlyFromAmong(String[]). È anche possibile personalizzare il completamento delle schede fornendo valori in modo dinamico in fase di esecuzione.
Abilitare il completamento automatizzato tramite tabulazione
Nel computer in cui si vuole abilitare il completamento della scheda seguire questa procedura.
Per il .NET CLI:
Per altre applicazioni a riga di comando basate su System.CommandLine:
Installa lo
dotnet-suggeststrumento globale.Aggiungere lo script shim appropriato al profilo della shell. Potrebbe essere necessario creare un file di profilo della shell. Lo script shim inoltra le richieste di completamento dalla shell allo strumento
dotnet-suggest, che le delega all'app appropriata basata suSystem.CommandLine.Per
bashaggiungere il contenuto di dotnet-suggest-shim.bash a ~/.bash_profile.Per
zshaggiungere il contenuto di dotnet-suggest-shim.zsh a ~/.zshrc.Per PowerShell, aggiungere il contenuto di dotnet-suggest-shim.ps1 al profilo di PowerShell. È possibile trovare il percorso previsto per il profilo di PowerShell eseguendo il comando seguente nella console:
echo $profile
Registrare l'app chiamando
dotnet-suggest register --command-path $executableFilePath, dove$executableFilePathè il percorso del file eseguibile dell'app.
Dopo aver configurato la shell dell'utente e aver registrato il file eseguibile, i completamenti funzioneranno per tutte le app compilate usando System.CommandLine.
Per cmd.exe in Windows (Prompt dei comandi di Windows) non esiste un meccanismo modulare per il completamento tramite tabulazione, quindi non è disponibile alcun script di interfaccia. Per altre shell, cerca un problema su GitHub etichettato come Area-Completions. Se non si trova un problema, è possibile aprirlo uno nuovo.
Ottenere i valori di completamento tramite tabulazione in fase di esecuzione
Il codice seguente mostra un'app che recupera i valori per il completamento tramite tabulazione in modo dinamico in fase di esecuzione. Il codice ottiene un elenco delle due settimane di date successive alla data corrente. L'elenco viene fornito all'opzione --date chiamando CompletionSources.Add:
using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;
new DateCommand().Parse(args).Invoke();
class DateCommand : Command
{
private Argument<string> subjectArgument = new("subject")
{
Description = "The subject of the appointment."
};
private Option<DateTime> dateOption = new("--date")
{
Description = "The day of week to schedule. Should be within one week."
};
public DateCommand() : base("schedule", "Makes an appointment for sometime in the next week.")
{
this.Arguments.Add(subjectArgument);
this.Options.Add(dateOption);
dateOption.CompletionSources.Add(ctx => {
var today = System.DateTime.Today;
List<CompletionItem> dates = new();
foreach (var i in Enumerable.Range(1, 7))
{
var date = today.AddDays(i);
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
}
return dates;
});
this.SetAction(parseResult =>
{
Console.WriteLine($"Scheduled \"{parseResult.GetValue(subjectArgument)}\" for {parseResult.GetValue(dateOption)}");
});
}
}
I valori mostrati quando viene premuto il tasto Tab sono forniti come istanze CompletionItem.
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Vengono impostate le proprietà seguenti CompletionItem :
-
Labelè il valore di completamento da visualizzare. -
SortTextassicura che i valori nell'elenco vengano presentati nell'ordine corretto. Viene impostato convertendoiin una stringa a due cifre, in modo che l'ordinamento sia basato su 01, 02, 03 e così via, fino a 14. Se non si imposta questo parametro, l'ordinamentoLabelè basato su , che in questo esempio è in formato di data breve e non verrà ordinato correttamente.
Esistono altre CompletionItem proprietà, ad esempio Documentation e Detail, ma non sono ancora usate in System.CommandLine.
L'elenco di completamento dinamico delle schede creato da questo codice compare anche nel risultato della Guida.
Description:
Makes an appointment for sometime in the next week.
Usage:
schedule <subject> [options]
Arguments:
<subject> The subject of the appointment.
Options:
--date The day of week to schedule. Should be within one week.
<2/4/2022|2/5/2022|2/6/2022|2/7/2022|2/8/2022|2/9/2022|2/10/2022>
--version Show version information
-?, -h, --help