2013-07-30 4 views
6

Próbuję dodać funkcję autouzupełniania do mojej aplikacji wiersza poleceń. Jak dotąd wszystkie odpowiedzi mówią, że jest to priorytet powłoki, ale w moim przypadku jest inaczej. Mój program przechodzi w pętlę (aby uzyskać polecenia) w main(), więc nie sądzę, że ma to coś wspólnego z powłoką. Jak mogę osiągnąć taki cel?Autouzupełnianie z C++ (NIE z powłoką)

To jest mój program. Rozpoczyna analizowanie, gdy użytkownik wpisze enter (std::getline()). Jak mogę uzyskać dane wejściowe użytkownika w czasie wykonywania bez korzystania z zewnętrznych bibliotek?

while (input != "exit") { 

    std::cout << "\nCommand >> "; 
    std::getline(std::cin, input); 

    com.parse(input); 
} 
+0

Z jakiej bazy danych chcesz automatycznie wypełniać? –

+2

Będziesz musiał użyć biblioteki. Zajrzyj do 'readline', jeśli jest dostępny dla twojej platformy. –

+0

@CodyGray może być wektorem słów kluczowych. – khajvah

Odpowiedz

2

Jak powiedział David Rodríguez, używanie readline GNU wykonuje zadanie (musiałem użyć biblioteki) w linuxie.

to oficjalna dokumentacja, ma kilka przykładów C, ale są one zbyt mylące, więc użyłem this do utworzenia niestandardowego autouzupełniania.

1

Możesz użyć ReadConsoleInput, aby dowiedzieć się, które klawisze są naciskane przez użytkownika. Można go znaleźć na MSDN tutaj: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961%28v=vs.85%29.aspx

Następnie można użyć WriteConsole, która pisze listy do konsoli z obecnego kursora świetnym miejscu, aby próbować uzupełni, co użytkownik pisze.

Następnie użyj SetConsoleCursorPosition z powrotem do miejsca, w którym znajdował się wskaźnik przed Twoim telefonem do WriteConsole. Umożliwi to użytkownikowi pisanie od miejsca, w którym przerwał pracę. Po prostu użyj WriteConsol, aby wstawić spacje, aby cofnąć autouzupełnianie w przypadku błędnego odgadnięcia.

nie sądzę getline() złapie listów od WriteConsole więc warto śledzić zarówno co użytkownik pisze, ale także to, co dodajesz za pomocą WriteConsole lub po prostu śledzić, co dowodzić swoją myśl pisał, a potem zadzwoń do tego, jeśli uderzy enter, gdy zasugerujesz polecenie.

Moja ostatnia porada to użycie SetConsoleAttributes, aby zmienić kolor dołączonego ciągu na jasnoszary, aby pokazać użytkownikowi, że jest to sugestia, a nie coś, co napisał.

+0

Zgodnie z OP, on używa Linuksa, więc msdn nie pomoże – Bogolt

+0

Tak ... Może powinienem przeczytać komentarze najpierw ..: P – Hjorthenify

+1

Nie ma za co! Zostawię odpowiedź na wypadek, gdyby ktoś inny miał ten sam problem z oknami. – Hjorthenify