2008-09-05 14 views
12

Des idées sur la façon d'implémenter la complétion d'une tabulation pour une application console .NET (C#)? Et je veux dire dans une application qui est exécuté et les boucles puis pour l'entrée de l'utilisateur (comme si vous exécutez ftp.exe sans arguments), comme ceci:Achèvement de l'onglet Application .NET Console

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

Je sais que je pourrais probablement pas utiliser readline, mais je voudrais être en mesure de faire l'achèvement de l'onglet au même moment où vous récupérez l'entrée de l'utilisateur.

Répondre

8

Effectuez une Console.ReadKey().

Si vous obtenez un onglet, regardez ce que vous avez dans le tampon de commande, et faites défiler vos commandes disponibles. Si someCommand.Name.BeginsWith(currentinput), vous avez un gagnant, et vous pouvez écrire pour afficher une liste de commandes possibles.

Si il n'y a qu'un seul (TM) vous pouvez le remplacer par ce que l'utilisateur avait tapé :)

+0

en utilisant readkey ne peut pas être appelé en parrallèle de readline peut-il? cela signifie que vous perdez la fonctionnalité readline et que vous devez faire une boucle sur readkey et ajouter/afficher manuellement ce qui est entré. Readline a une fonctionnalité de rappel de l'historique avec la touche "haut", vous allez la perdre, ou vous avez besoin de la recoder entièrement en utilisant readkey. Le meilleur pour c14n serait de trouver une solution hybride. (comme en utilisant Async readline?) –

3

J'ai créé une petite lib pour ajouter cette fonctionnalité à une application i fait:

https://github.com/fjunqueira/hinter

Cela pourrait ne pas convenir à vos besoins, mais vous pouvez le modifier librement.