diff --git a/completions/just.fish b/completions/just.fish index 0771de0135..7aedd4a81d 100644 --- a/completions/just.fish +++ b/completions/just.fish @@ -1,5 +1,31 @@ function __fish_just_complete_recipes - just --list 2> /dev/null | sed -e '1d; s/^\s*\([^[:space:]]*\)[^#]*$/\1/' -e 's/^\s*\([^[:space:]]*\)[^#]*# \(.*\)$/\1\t\2/' + just --list 2> /dev/null | tail -n +2 | awk '{ + command = $1; + args = $0; + desc = ""; + delim = ""; + sub(/^[[:space:]]*[^[:space:]]*/, "", args); + gsub(/^[[:space:]]+|[[:space:]]+$/, "", args); + + if (match(args, /#.*/)) { + desc = substr(args, RSTART+2, RLENGTH); + args = substr(args, 0, RSTART-1); + gsub(/^[[:space:]]+|[[:space:]]+$/, "", args); + } + + gsub(/\+|=[`\'"][^`\'"]*[`\'"]/, "", args); + gsub(/ /, ",", args); + + if (args != ""){ + args = "Args: " args; + } + + if (args != "" && desc != "") { + delim = "; "; + } + + print command "\t" args delim desc + }' end # don't suggest files right off diff --git a/src/completions.rs b/src/completions.rs index 3d805ff045..36999ee88e 100644 --- a/src/completions.rs +++ b/src/completions.rs @@ -1,5 +1,31 @@ pub(crate) const FISH_RECIPE_COMPLETIONS: &str = r#"function __fish_just_complete_recipes - just --list 2> /dev/null | sed -e '1d; s/^\s*\([^[:space:]]*\)[^#]*$/\1/' -e 's/^\s*\([^[:space:]]*\)[^#]*# \(.*\)$/\1\t\2/' + just --list 2> /dev/null | tail -n +2 | awk '{ + command = $1; + args = $0; + desc = ""; + delim = ""; + sub(/^[[:space:]]*[^[:space:]]*/, "", args); + gsub(/^[[:space:]]+|[[:space:]]+$/, "", args); + + if (match(args, /#.*/)) { + desc = substr(args, RSTART+2, RLENGTH); + args = substr(args, 0, RSTART-1); + gsub(/^[[:space:]]+|[[:space:]]+$/, "", args); + } + + gsub(/\+|=[`\'"][^`\'"]*[`\'"]/, "", args); + gsub(/ /, ",", args); + + if (args != ""){ + args = "Args: " args; + } + + if (args != "" && desc != "") { + delim = "; "; + } + + print command "\t" args delim desc + }' end # don't suggest files right off