diff --git a/completions/just.fish b/completions/just.fish index 086f513913..63ab67e49b 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 -e '1d; s/^[[:space:]]*([^[:space:]]+)[[:space:]]*#[[:space:]]*(.*)$/\1\t\2/' -e 's/^[[:space:]]*([^[:space:]]+)[[:space:]]*$/\1/' + 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 77cf19cd38..ca18d0d7f6 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 -e '1d; s/^[[:space:]]*([^[:space:]]+)[[:space:]]*#[[:space:]]*(.*)$/\1\t\2/' -e 's/^[[:space:]]*([^[:space:]]+)[[:space:]]*$/\1/' + 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