2011-02-05 74 views
1

我正在使用readline從stdin讀取命令的應用程序。 它接受「cd」和其他需要路徑作爲參數的命令。我遇到了包含空格的路徑問題。我的目標是以某種方式使readline引用空格,並在出現此字符後自動完成路徑名稱(實際上,當遇到空格時,它將被跳過,自動完成將從下一個單詞開始)。GNU readline空格引用

我一直在努力做到這一點,但我一直在嘗試的事情,他們都沒有工作。我已經設法將「」轉換爲「\」,這正是我想要的。但是,然後readline不會將其解釋爲路徑的一部分,它只是跳過它,並自動完成下一個單詞,就好像之前沒有任何東西。基本上,我期待着與bash的自動完成相同的行爲。

任何幫助表示讚賞。 在此先感謝!

編輯:

好了,我已經成功地完成某種方式我一直在尋找。我所做的是:

在初始化過程中:

rl_attempted_completion_function = completition; 
rl_completer_quote_characters = "\""; 
rl_filename_quote_characters = " "; 

completition應該返回一個char **包含每個匹配內容「文本」作爲迄今爲止命令。我已經省略了那部分,因爲它不需要處理我的問題。重要的部分是rl_filename_quoting_desired = 1;它告訴readline你希望你的文件名被引用。 。

char **completition(const char *text, int start, int end) {  
    rl_filename_quoting_desired = 1; 
    return 0; 
} 

需要注意的是什麼,我落得這樣做是什麼BuHHu-NYX說,剛加雙引號(「),以文件名

回答

2

試圖逃跑沒有空間,但整個路徑,例如:

cd "/path/to/some where" 
+0

是的,這是一種可能性,但我的問題是如何使用readline來實現這一點,有很多變量和回調可以設置爲任何我想要的,以便readline引用空格,因爲它是預期的。看看bash的源代碼,我開始明白了.Howerver,我還沒有完成它。 – mfontanini 2011-02-05 12:50:26