我想爲背景程序編寫一個命令行shell,並且我可以輸入一些命令。我想添加一個像bash(或其他類似殼)的功能---'UP'鍵來獲取歷史輸入。我怎樣才能捕捉按下'UP'鍵?如何編寫命令行shell來捕獲'UP'鍵以獲取歷史輸入?
如果我只是使用std::getline(std::cin, line)
我不能得到'UP'鍵或其他功能鍵,即。按Ctrl + w刪除輸入行的一個字。
我想爲背景程序編寫一個命令行shell,並且我可以輸入一些命令。我想添加一個像bash(或其他類似殼)的功能---'UP'鍵來獲取歷史輸入。我怎樣才能捕捉按下'UP'鍵?如何編寫命令行shell來捕獲'UP'鍵以獲取歷史輸入?
如果我只是使用std::getline(std::cin, line)
我不能得到'UP'鍵或其他功能鍵,即。按Ctrl + w刪除輸入行的一個字。
有一個readline
功能,支持歷史和在線編輯等
在基本模式它會讀取線條等。如果您想添加掛鉤,則可以在按tab
或類似條件時使其擴展命令。
這就是您在Linux中使用的典型shell。
文檔瀏覽: http://web.mit.edu/gnu/doc/html/rlman_2.html
這裏有一個例子: http://www.delorie.com/gnu/docs/readline/rlman_48.html
項目主頁: http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
使用ncurses庫,看到sample program:
#include<ncurses.h>
#include<iostream>
int main()
{
int ch;
initscr(); //initialize the ncurses data structures
keypad(stdscr,TRUE); //enable special keys capturing
ch=getch();
if(ch==KEY_UP)
std::cout << "Key up pressed!" << std::endl;
}
有一個 「函數getline庫」,這是一個C的功能,讓你編輯/記錄您的程序輸入的歷史記錄等。或者,你將不得不閱讀原始輸入和自己處理鍵盤輸入... –
有一個[相關(雖然不同)的問題](http://stackoverflow.com/questions/18505947/how-to-make-command-歷史在控制檯應用程序/ 18506211#18506211)今天,這可能是有趣的。 – Hulk
@MatsPetersson你的建議是非常有用的,它應該是一個答案,而不是一個共同點。我現在使用GNU readline庫。 http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html –