我正在开发一个应用程序,它使用 readline 从 stdin 读取命令。 它接受“cd”和其他需要路径作为参数的命令。我在处理包含空格的路径时遇到了麻烦。我的目标是以某种方式让 readline 引用空格,并在该字符出现后自动完成路径名(实际上,当遇到空格时,它只是被跳过,自动完成从下一个单词开始)。
我一直在努力实现这一目标,但我一直在尝试,但没有一个奏效。我已经设法将“”引用为“\”,这就是我想要的。但是 readline 不会将其解释为路径的一部分,它只是跳过它,并自动完成下一个单词,就好像之前没有任何内容一样。基本上,我期待与 bash 的自动完成功能相同的行为。
感谢任何帮助。 提前致谢!
编辑:
好吧,我已经设法以某种方式完成了我一直在寻找的东西。我所做的是:
初始化期间:
rl_attempted_completion_function = completition;
rl_completer_quote_characters = "\"";
rl_filename_quote_characters = " ";
完成应该返回一个字符**,其中包含到目前为止与“文本”相匹配的每个命令。我省略了那部分,因为它与我的要求无关。重要的部分是 rl_filename_quoting_desired = 1;它告诉 readline 你想要你的文件名被引用。
char **completition(const char *text, int start, int end) {
rl_filename_quoting_desired = 1;
return 0;
}
请注意,我最终做的是 BuHHu-nyx 所说的,只是在文件名中添加双引号 (")。
最佳答案
尝试转义的不是空格,而是整个路径。例如:
cd "/path/to/some where"
关于c++ - GNU readline 空格引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4904980/