我正在使用readline从stdin读取命令的应用程序。 它接受“cd”和其他需要路径作为参数的命令。我遇到了包含空格的路径的麻烦。我的目标是以某种方式使readline引用空格,并在此字符出现后自动填充路径名(实际上,当遇到空格时,它只是被跳过,并且自动完成从下一个单词开始)。
我一直在努力实现这一目标,但我一直在努力,但没有一个能够奏效。我已经设法将“”引用为“\”,这就是我想要的。但是readline并没有把它解释为路径的一部分,它只是跳过它,并自动填充下一个单词,就像之前没有任何东西一样。基本上,我期待与bash的自动完成相同的行为。
感谢任何帮助。 提前谢谢!
编辑:
好吧,所以我设法以某种方式完成了我想要的东西。我做的是:
初始化期间:
rl_attempted_completion_function = completition;
rl_completer_quote_characters = "\"";
rl_filename_quote_characters = " ";
completition应该返回一个char **,其中包含与迄今为止的“text”匹配的每个命令。我已经省略了那一部分,因为它与我的要求没有关系。重要的部分是rl_filename_quoting_desired = 1;告诉readline您希望引用您的文件名。
char **completition(const char *text, int start, int end) {
rl_filename_quoting_desired = 1;
return 0;
}
请注意,我最终做的是BuHHu-nyx所说的,只是在文件名中添加双引号(“)。
答案 0 :(得分:2)
尽量逃避空间而不是整个路径。例如:
cd "/path/to/some where"