2008-09-05 10 views
12

Haben Sie Ideen, wie Sie die Tabulatorvervollständigung für eine .NET (C#) Konsolenanwendung implementieren? Und ich innerhalb einer Anwendung bedeutet das ausgeführt wird, und dann in einer Schleife für Benutzereingaben (wie wenn Sie ftp.exe ohne Argumente laufen), wie folgt aus:.NET Console Anwendung Tab Fertigstellung

 string line = string.Empty; 
     while (line != "exit") 
     { 
      //do something here 
      Console.ReadLine(); 
     } 

Ich weiß, ich könnte wahrscheinlich nicht wirklich Readline- verwenden, aber ich möchte in der Lage sein, die Tab-Vervollständigung an dem Punkt durchzuführen, an dem Sie die Eingabe des Benutzers abrufen.

Antwort

8

Machen Sie eine Console.ReadKey().

Wenn Sie eine Registerkarte erhalten, sehen Sie, was Sie im Befehlspuffer haben, und durchlaufen Sie Ihre verfügbaren Befehle. Wenn someCommand.Name.BeginsWith(currentinput), haben Sie einen Gewinner, und Sie können schreiben, um eine Liste der möglichen Befehle zu screenen.

Wenn nur ein (TM) ist, können Sie es mit ersetzen, was der Benutzer eingegeben hatte :)

+0

mit readkey kann nicht parallel von readline aufgerufen werden kann es? Es bedeutet also, dass Sie die Readline-Funktionalität verlieren und Sie müssen die Readkey-Funktion durchlaufen und manuell an den Eingang anfügen/anzeigen. Readline verfügt über eine History-Recall-Funktionalität mit "up" -Schlüssel. Sie verlieren diese oder müssen sie komplett readkey-rekodieren. Am besten wäre es für c14n, eine hybride Lösung zu finden. (Wie Async Readline verwenden?) –

3

Ich habe eine kleine lib diese Funktionalität zu einer App hinzuzufügen i gemacht:

https://github.com/fjunqueira/hinter

Es mag nicht Ihren Bedürfnissen entsprechen, aber Sie können es gerne bearbeiten.