Fix __fish_complete_suffix for arguments starting with './'

The previous completion generation was broken for several reasons:
* ./foo would break detection of suffix due to the leading . being
  interpreted an extension marker,
* ./foo would be completed as foo, which would be excluded from
  matching inrcomplete.cpp
This commit is contained in:
Mahmoud Al-Qudsi 2018-04-29 11:17:35 -05:00
parent 376a4eca58
commit 4962244161

View file

@ -33,10 +33,22 @@ function __fish_complete_suffix -d "Complete using files"
end
# Perform the completion
# Strip leading ./ as it confuses the detection of base and suffix
# It is conditionally re-added below.
set -l base_temp (string replace -r '^\./' '' -- $comp)
set base (string replace -r '\.[^.]*$' '' -- $comp | string trim -c '\'"') # " make emacs syntax highlighting happy
eval "set files $base*$suff"
set base (string replace -r '\.[^.]*$' '' -- $base_temp | string trim -c '\'"') # " make emacs syntax highlighting happy
# echo "base: $base" > /dev/tty
# echo "suffix: $suff" > /dev/tty
# If $comp is "./ma" and the file is "main.py", we'll catch that case here,
# but complete.cpp will not consider it a match, so we have to output the
# correct form.
if string match -qr '^\./' -- $comp
eval "set files ./$base*$suff"
else
eval "set files $base*$suff"
end
if test $files[1]
printf "%s\t$desc\n" $files