Vervollständigung der Registerkarte „Anwendung der .NET-Konsole“.
Frage
Irgendwelche Ideen, wie man die Tab-Vervollständigung für eine .NET (C#)-Konsolenanwendung implementiert?Und ich meine innerhalb einer Anwendung, die ausgeführt wird und dann eine Schleife für Benutzereingaben durchführt (z. B. wenn Sie ftp.exe ohne Argumente ausführen), wie folgt:
string line = string.Empty;
while (line != "exit")
{
//do something here
Console.ReadLine();
}
Ich weiß, dass ich readline wahrscheinlich nicht wirklich verwenden könnte, aber ich möchte die Tab-Vervollständigung an derselben Stelle durchführen können, an der Sie Eingaben vom Benutzer abrufen.
Lösung
Schauen Sie sich diesen Code aus dem Mono-Projekt anhttp://tirania.org/blog/archive/2008/Aug-26.htmlIch habe neulich mal damit gespielt.Es erledigt viele Befehlszeilenbearbeitungen, aber ich glaube nicht, dass es eine Zeilenvervollständigung ermöglicht.
Andere Tipps
Führen Sie einen Console.ReadKey() aus.
Wenn Sie einen Tab erhalten, sehen Sie sich an, was sich im Befehlspuffer befindet, und durchlaufen Sie Ihre verfügbaren Befehle.Wenn someCommand.Name.BeginsWith(currentinput)
, Sie haben einen Gewinner und können eine Liste möglicher Befehle auf den Bildschirm schreiben.
Wenn Es gibt nur einen(TM) Sie können es durch das ersetzen, was der Benutzer eingegeben hat :)
Ich habe eine kleine Bibliothek erstellt, um diese Funktionalität zu einer von mir erstellten App hinzuzufügen:
https://github.com/fjunqueira/hinter
Es entspricht möglicherweise nicht Ihren Anforderungen, Sie können es jedoch jederzeit bearbeiten.