开发者

GNU readline whitespace quoting

开发者 https://www.devze.com 2023-02-08 11:30 出处:网络
i´m working on an application which uses readline to read commands from stdin. It accepts \"cd\", and other commands which require a path as an argument. I\'m having troubles with paths that include

i´m working on an application which uses readline to read commands from stdin. It accepts "cd", and other commands which require a path as an argument. I'm having troubles with paths that include whitespaces. My objective is to somehow make readline quote the whitespaces, and autocomplete the path name after this character appears(actually, when a space is encountered, it is just skipped, and autocompletion starts from the next word).

I've been trying to achieve this, but i keep trying things and none of them work. I've managed to quote a " " into a "\ ", which is what i want. But then readline doesn't interpret this as part of the path, it just skips it, and autocompletes the next word as if there was nothing before that. Basically, i'm expecting the same behaviour as bash's autocompletion.

Any help is appreciated. Thanks in advance!

Edit:

Alright, so i've managed to somehow accomplish what i was looking for. What i did was:

During initialization:

rl_attempted_completion_f开发者_如何转开发unction = completition;
rl_completer_quote_characters = "\"";
rl_filename_quote_characters  = " ";

completition should return a char** containing every command that matches what "text" as so far. I've ommitted that part, since it doesn't have to do with what i was asking. The important part is the rl_filename_quoting_desired = 1; which tells readline that you want your filenames to be quoted.

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

Note that what i ended up doing is what BuHHu-nyx said, just adding double quotes(") to filenames.


Try to escape not spaces but the whole path. For example:

cd "/path/to/some where"
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号