2011-02-05 13 views
1

私はstdinからコマンドを読むためにreadlineを使用するアプリケーションで作業しています。 "cd"と、引数としてパスを必要とする他のコマンドを受け入れます。私は空白を含むパスに問題があります。私の目的は、何とかreadlineで空白を引用符で囲み、この文字が現れた後にパス名を自動完成させることです(実際には空白に遭遇したとき、スキップされ、次の単語からオートコンプリートが始まります)。GNU readline空白引用

私はこれを達成しようとしてきましたが、私は物事を試し続けており、どれもうまくいきません。私は "\"を引用することができました。これは私が望むものです。しかし、readlineはこれをパスの一部として解釈せず、スキップして次の単語をオートコンプリートします。基本的には、私はbashのオートコンプリートと同じ動作を期待しています。

何か助けていただければ幸いです。 ありがとうございます!

編集:

さてさて、私は何とか私が探していたものを達成するために管理してきました。私がやったことだった:初期化中

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

completition **はどのような「テキスト」として、これまでに一致するすべてのコマンドを含む文字を返す必要があります。それは私が求めていたものと関係がないので、私はその部分を省略しました。重要な部分は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

関連する問題