Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las aplicaciones que usan System.CommandLine tienen compatibilidad integrada con la finalización con tabulación en determinados shells. Para habilitarlo, el usuario final debe realizar algunos pasos una vez por shell. Una vez hecho esto, la finalización de tabulación es automática para los valores estáticos de la aplicación, como valores de enumeración o valores definidos mediante una llamada a AcceptOnlyFromAmong(String[]). También puede personalizar la finalización con tabulación proporcionando valores dinámicamente en tiempo de ejecución.
Habilitación de la finalización de tabulación
En el equipo en el que desea habilitar la finalización de pestañas, siga estos pasos.
Para la CLI de .NET:
Para otras aplicaciones de línea de comandos basadas en System.CommandLine:
Instale la herramienta global
dotnet-suggest.Agregue el script de correcciones de compatibilidad (shim) adecuado a su perfil de shell. Es posible que tenga que crear un archivo de perfil de shell. El script de correcciones de compatibilidad (shim) reenvía las solicitudes de finalización desde el shell a la herramienta
dotnet-suggest, que delega a la aplicación basada enSystem.CommandLineadecuada.Para
bash, agregue el contenido de dotnet-suggest-shim.bash a ~/.bash_profile.Para
zsh, agregue el contenido de dotnet-suggest-shim.zsh a ~/.zshrc.Para PowerShell, agregue el contenido de dotnet-suggest-shim.ps1 al perfil de PowerShell. Para encontrar la ruta de acceso esperada al perfil de PowerShell, ejecute el siguiente comando en la consola:
echo $profile
Registre la aplicación llamando a
dotnet-suggest register --command-path $executableFilePath, donde$executableFilePathes la ruta de acceso al archivo ejecutable de la aplicación.
Una vez configurado el shell del usuario y registrado el archivo ejecutable, las finalizaciones funcionarán para todas las aplicaciones compiladas mediante System.CommandLine.
Para cmd.exe en Windows (el símbolo del sistema de Windows) no hay ningún mecanismo de finalización con tabulación que se pueda conectar, por lo que no hay ningún script de correcciones de compatibilidad (shim) disponible. Para otros shells, busque una incidencia de GitHub etiquetada con Area-Completions. Si no encuentra ningún problema, puede abrir uno nuevo.
Obtención de valores de finalización de tabulación en tiempo de ejecución
El código siguiente muestra una aplicación que recupera valores para la finalización de tabulaciones dinámicamente en tiempo de ejecución. El código obtiene una lista de las dos próximas semanas de fechas después de la fecha actual. La lista se proporciona a la opción --date llamando a 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)}");
});
}
}
Los valores que se muestran cuando se presiona la tecla Tab se proporcionan como CompletionItem instancias:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Se establecen las siguientes CompletionItem propiedades:
-
Labeles el valor de finalización que se va a mostrar. -
SortTextgarantiza que los valores de la lista se presentan en el orden correcto. Se establece convirtiendoien una cadena de dos dígitos, por lo que la ordenación se basa en 01, 02, 03, etc., hasta 14. Si no establece este parámetro, la ordenación se basa en ,Labelque en este ejemplo tiene un formato de fecha corta y no se ordenará correctamente.
Hay otras CompletionItem propiedades, como Documentation y Detail, pero aún no se usan en System.CommandLine.
La lista de finalización de pestañas dinámicas creada por este código también aparece en la salida de la ayuda:
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