Fix completion on paths containing spaces (#6779)

There was an issue with autocompletion of a path with a space in it.

Before:

:o test\ dir -> <TAB> -> test\ dirfile1

After:

:o test\ dir -> <TAB> -> test\ dir\file1
pull/16/head
Ivan Gulakov 2 years ago committed by GitHub
parent b0705337be
commit 2cccb3f09c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2847,13 +2847,10 @@ pub(super) fn command_mode(cx: &mut Context) {
} else { } else {
// Otherwise, use the command's completer and the last shellword // Otherwise, use the command's completer and the last shellword
// as completion input. // as completion input.
let (part, part_len) = if words.len() == 1 || shellwords.ends_with_whitespace() { let (word, word_len) = if words.len() == 1 || shellwords.ends_with_whitespace() {
(&Cow::Borrowed(""), 0) (&Cow::Borrowed(""), 0)
} else { } else {
( (words.last().unwrap(), words.last().unwrap().len())
words.last().unwrap(),
shellwords.parts().last().unwrap().len(),
)
}; };
let argument_number = argument_number_of(&shellwords); let argument_number = argument_number_of(&shellwords);
@ -2862,13 +2859,13 @@ pub(super) fn command_mode(cx: &mut Context) {
.get(&words[0] as &str) .get(&words[0] as &str)
.map(|tc| tc.completer_for_argument_number(argument_number)) .map(|tc| tc.completer_for_argument_number(argument_number))
{ {
completer(editor, part) completer(editor, word)
.into_iter() .into_iter()
.map(|(range, file)| { .map(|(range, file)| {
let file = shellwords::escape(file); let file = shellwords::escape(file);
// offset ranges to input // offset ranges to input
let offset = input.len() - part_len; let offset = input.len() - word_len;
let range = (range.start + offset)..; let range = (range.start + offset)..;
(range, file) (range, file)
}) })

Loading…
Cancel
Save