partitionist
Erfahrenes Mitglied
Hallo, ich habe eine Art Shell geschrieben welche per getline() Befehle entgegenimmt und ausführt. Jetzt möchte ich wie bei Linux Shells TAB Completition einbauen also eine Art Befehls Vervollständigung. Ein Beispiel es soll "shutdown" eingeben werden:
sh[tab] = shutdown
wie man sieht werden hier zwei buchstaben eingegeben und mit der TAB Taste wird der Befehl dann vervollständigt.
Nun zu meinem Problem, ich habe ein Beispiel Code welche auch auf die TAB Taste reagiert, aber das ist wieder eine andere Eingabe Funktion und nicht die getline() mit der ich Befehle eingebe, also wie kann diese beiden verbinden?
sh[tab] = shutdown
wie man sieht werden hier zwei buchstaben eingegeben und mit der TAB Taste wird der Befehl dann vervollständigt.
Nun zu meinem Problem, ich habe ein Beispiel Code welche auch auf die TAB Taste reagiert, aber das ist wieder eine andere Eingabe Funktion und nicht die getline() mit der ich Befehle eingebe, also wie kann diese beiden verbinden?
Code:
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
bool Keypress(char &Key)
{
INPUT_RECORD Event;
DWORD NumberOfEvents, EventsRead, EventCounter;
GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), &NumberOfEvents);
if (NumberOfEvents == 0)
return false;
for (EventCounter = 0; EventCounter < NumberOfEvents; EventCounter++)
{
PeekConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &Event, 1, &EventsRead);
if ((Event.EventType == KEY_EVENT) && ((Event.Event.KeyEvent.bKeyDown)))
{
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &Event, 1, &EventsRead);
Key = Event.Event.KeyEvent.wVirtualKeyCode;
if (!(FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE))))
exit(0);
return true;
}
else
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &Event, 1, &EventsRead);
}
return false;
}
int main()
{
string str;
char key = 0;
cout << "Eingabe:";
do
{
//getline(cin, str);
if (Keypress(key))
{
if (key == VK_TAB)
cout << "TAB";
if (key == VK_ESCAPE)
return 0;
}
}while(1);
return 0;
}