From 4962244161d3908e75ffb35551fe67608e28525e Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Sun, 29 Apr 2018 11:17:35 -0500 Subject: [PATCH] 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 --- share/functions/__fish_complete_suffix.fish | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/share/functions/__fish_complete_suffix.fish b/share/functions/__fish_complete_suffix.fish index 7c5ad2e91..cde966d90 100644 --- a/share/functions/__fish_complete_suffix.fish +++ b/share/functions/__fish_complete_suffix.fish @@ -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