C++ GNU读线空白引用

C++ GNU读线空白引用,c++,parsing,whitespace,gnu,readline,C++,Parsing,Whitespace,Gnu,Readline,我正在开发一个应用程序,它使用readline从stdin读取命令。 它接受“cd”和其他需要路径作为参数的命令。我对包含空格的路径有问题。我的目标是以某种方式使readline引用空格,并在该字符出现后自动完成路径名(实际上,当遇到空格时,它只是被跳过,自动完成从下一个单词开始) 我一直在努力实现这一目标,但我一直在尝试,但没有一个成功。我已经设法把一个“”改成了一个“\”,这正是我想要的。但是readline并没有将此解释为路径的一部分,它只是跳过它,并自动完成下一个单词,就好像之前什么都没

我正在开发一个应用程序,它使用readline从stdin读取命令。 它接受“cd”和其他需要路径作为参数的命令。我对包含空格的路径有问题。我的目标是以某种方式使readline引用空格,并在该字符出现后自动完成路径名(实际上,当遇到空格时,它只是被跳过,自动完成从下一个单词开始)

我一直在努力实现这一目标,但我一直在尝试,但没有一个成功。我已经设法把一个“”改成了一个“\”,这正是我想要的。但是readline并没有将此解释为路径的一部分,它只是跳过它,并自动完成下一个单词,就好像之前什么都没有一样。基本上,我期待着与bash的自动完成相同的行为

感谢您的帮助。 提前谢谢

编辑:

好吧,我已经设法完成了我想要的。我所做的是:

初始化期间:

rl_attempted_completion_function = completition;
rl_completer_quote_characters = "\"";
rl_filename_quote_characters  = " ";
Completion应返回一个字符**,其中包含迄今为止与“文本”匹配的每个命令。我已经同意了这一部分,因为这与我的要求无关。重要的部分是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"

是的,这是可能的。但我的问题是如何使用readline实现这一点。有很多变量和回调可以设置为我想要的任何值,以便readline按照预期引用空格。我正在查看bash的源代码,并开始了解它。然而,我还没有完成它。