Autovervollständigung von Befehlen mit TAB



  • Hallo Leute ich habe Shell die Befehle ausführt, wie kann ich eingegebene Anfangsbuchstaben mit TAB ergänzen? Zum Beispiel ich will den Befehl "help" eingeben, es wird hierbei nur "h" eingegeben und dann soll mit TAB der Rest ergänzt werden. Wie wird sowas realisiert?



  • dazu musst du dann eben die Tab-Taste abfangen und dann schauen, was bisher schon dasteht und dann anhand einer Liste der vorhandenen Bafehle versuchen herauszufinden, welcher Befehl es wohl sein soll...



  • Meine Eingabe sieht so aus:

    getline(cin, str);
    

    wie baue folgendes in die eingabe ein?

    if(_kbhit())
    {
    	char zeichen = getch();
    	if(zeichen == 9)//TAB
    	{					
    		cout << "AUTOCOMMAND TAB" << endl; 
    	}
    }
    


  • Ich denke, dass du dann mit getline wohl nicht mehr arbeiten kannst, sondern alles über getch() machen musst. Also musst du dich wohl auch selbst um so Sachen wie die Behandlung von Backspace etc. kümmern...

    Aber ich verschiebe dich einfach mal in das entsprechende Unterforum (hoffentlich auch das richtige 🙄 ) - dort kann dir wohl kompetenter geholfen werden. 🙂



  • Dieser Thread wurde von Moderator/in flenders aus dem Forum WinAPI in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich denke, dass du dann mit getline wohl nicht mehr arbeiten kannst, sondern alles über getch() machen musst.

    Hab folgendes verwendet:

    char zeichen;
    
    		do
    		{
    			prompt();
    			textcolor(green);
    
    			cin.get(zeichen);
    			if(zeichen != '\n')
    			{				
    				getline(cin, str);
    				//str.insert(0, zeichen);
    			}
    
    			if(zeichen == 9)
    			{
    				cout << "AUTOCOMMAND TAB" << endl; 
    			}
    

    Ich finde diese Methode nicht sauber, wie kann ich angefangene Befehle hierbei mit TAB erweitern?

    Bitte um Lösungsansätze oder Beispiele.



  • Mit Standard C/C++ wirst Du das Proiblem nicht lösen können...
    Es gibt ja auch die Möglichkeit dass es mehrere Befehle für ein oder mehrere Anfangsbuchstaben geben kann... durch mehrmaliges TAB-drücken erhält mann entweder eine Liste (wie in Linux) oder geht dann zum nächsten Befehl.
    Hierzu musst Du aber den Curso verschieben... und das geht nur mit WinAPI...

    Auch kommst Du wie schon erwähnt nicht drum rum jeden Tastendruck separat einzulesen und auszuwerten.



  • Alle Befehle befinden sich im Ordner

    bin\
    

    , jetzt dachte ich mir ich lese den inhalt aus und speicher die Befehle in eine Datei, später soll in der Eingabe die Befehle aus der Datei verglichen werden. Ist die Methode erforderlich oder sollte ich direkt aus *bin* auslesen?

    Auch kommst Du wie schon erwähnt nicht drum rum jeden Tastendruck separat einzulesen und auszuwerten.

    Also jedes eingegebene Zeichen soll erst verglichen werden, sobald die TAB Taste gedrückt wird. Ist das so die richtige Funktionweise oder wie würdet ihr das Realisieren'?


Anmelden zum Antworten