2013-07-30 15 views
6

Sto tentando di aggiungere funzionalità di completamento automatico alla mia applicazione della riga di comando. Finora tutte le risposte stanno dicendo che è la priorità della shell, ma nel mio caso è diversa. Il mio programma va in loop (per ottenere comandi) in main(), quindi non penso che abbia nulla a che fare con la shell. Come posso raggiungere questo obiettivo?Completamento automatico con C++ (NON con Shell)

Questo è il mio programma. Inizia l'analisi quando l'utente preme Invio (std::getline()). Come posso ottenere l'input dell'utente in fase di runtime senza utilizzare alcuna libreria esterna?

while (input != "exit") { 

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

    com.parse(input); 
} 
+0

Da quale database si desidera eseguire automaticamente il completamento? –

+2

Dovrai usare una libreria. Dai un'occhiata a readline se è disponibile per la tua piattaforma. –

+0

@CodyGray può essere un vettore di parole chiave. – khajvah

risposta

2

Come ha detto David Rodríguez, l'uso di GNU leggibile fa il lavoro (dovevo usare una libreria) in linux.

This è la documentazione ufficiale, ha alcuni esempi in C ma sono troppo confusi, quindi ho utilizzato this per creare il completamento automatico personalizzato.

1

È possibile utilizzare ReadConsoleInput per scoprire quali tasti che vengono premuti dall'utente. Si può trovare su MSDN qui: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961%28v=vs.85%29.aspx

quindi è possibile utilizzare WriteConsole, che scrive lettere alla console dalla posizione del cursore corrente, per tentare di completare automaticamente ciò che l'utente sta scrivendo.

Quindi utilizzare SetConsoleCursorPosition indietro a dove il puntatore era prima della chiamata a WriteConsole. Ciò consentirà all'utente di continuare a digitare da dove ha lasciato. Basta usare WriteConsol per riempire gli spazi per annullare il completamento automatico nel caso in cui abbiate indovinato.

Non penso getline() prenderà le lettere WriteConsole così si potrebbe desiderare di replicare ciò che l'utente sta scrivendo, ma anche quello che si sta aggiungendo utilizzando WriteConsole o semplicemente tenere traccia di quello di comandare il vostro pensiero avrebbe scritto e poi chiamalo così se colpisce entra dopo che hai suggerito un comando.

Il mio ultimo consiglio sarebbe utilizzare SetConsoleAttributes per cambiare il colore della stringa aggiunta in grigio chiaro per mostrare all'utente che si tratta di un suggerimento e non di qualcosa che ha scritto.

+0

Come OP afferma che usa linux, quindi msdn non aiuterà – Bogolt

+0

Sì ... Forse avrei dovuto leggere prima i commenti ..: P – Hjorthenify

+1

Prego! Ill lasciare la risposta nel caso in cui qualcun altro abbia lo stesso problema per Windows. – Hjorthenify

Problemi correlati