From e585ed9c74152cfcad86ad7e03e58a6779c4bd70 Mon Sep 17 00:00:00 2001 From: l4zygreed Date: Mon, 30 Oct 2023 19:29:33 +0200 Subject: [PATCH] Fix Fish completion script (#1710) --- completions/just.fish | 28 +++++++++++++++++++++++++++- src/completions.rs | 28 +++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/completions/just.fish b/completions/just.fish index 0771de0..7aedd4a 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 3d805ff..36999ee 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