2013-07-30 63 views
6

我想添加自動完成功能到我的命令行應用程序。到目前爲止,所有的答案都是說它是shell的優先級,但在我的情況下它是不同的。我的程序在main()中進入循環(獲取命令),所以我認爲它與shell沒有任何關係。我怎樣才能達到這樣的目標?自動完成與C + +(不與殼牌)

以下是我的程序。它在用戶輸入時開始解析(std::getline())。如何在不使用任何外部庫的情況下在運行時獲得用戶輸入?

while (input != "exit") { 

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

    com.parse(input); 
} 
+0

你想從哪個數據庫自動完成? –

+2

您將需要使用庫。如果它適用於您的平臺,請查看'readline'。 –

+0

@CodyGray可能是一個關鍵字向量。 – khajvah

回答

2

正如大衛羅德里格斯所說,使用readline GNU在Linux下完成這項工作(我不得不使用一個庫)。

This是官方文檔,它有一些C例子,但它們太混亂了,所以我用this來創建我自定義的自動完成。

1

您可以使用ReadConsoleInput找出用戶正在按下哪些按鍵。 它可以在MSDN在這裏找到: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961%28v=vs.85%29.aspx

然後你可以使用WriteConsole,其中寫信給從當前光標現在的位置是控制檯,試圖自動完成用戶正在打字。

然後使用SetConsoleCursorPosition回到您撥打WriteConsole之前指針所在的位置。這將允許用戶繼續打字。只需使用WriteConsol即可填充空格,以便在您猜錯的情況下撤消自動填充。

我不認爲getline()會趕上從WriteConsole字母,所以你可能要同時跟蹤用戶正在打字,而且你正在使用WriteConsole或添加什麼只是跟蹤哪些命令你以爲他會寫,然後在你提出命令後,如果他進入了這個命令,就打電話給他。

我最後的建議是使用SetConsoleAttributes將附加字符串的顏色更改爲淺灰色以向用戶顯示這是一個建議,而不是他寫的內容。

+0

由於OP表示他使用Linux,所以msdn不會幫助 – Bogolt

+0

是的......也許我應該先閱讀註釋..:P – Hjorthenify

+1

不客氣!如果其他人對Windows有同樣的問題,我會留下回復。 – Hjorthenify