dimti
7 months ago
3 changed files with 94 additions and 2 deletions
-
4src/.env
-
84src/dockerfiles/workspace/completion.sh
-
8src/dockerfiles/workspace/workspace.base.Dockerfile
@ -0,0 +1,84 @@ |
|||||
|
# This file is part of the Symfony package. |
||||
|
# |
||||
|
# (c) Fabien Potencier <fabien@symfony.com> |
||||
|
# |
||||
|
# For the full copyright and license information, please view |
||||
|
# https://symfony.com/doc/current/contributing/code/license.html |
||||
|
|
||||
|
_sf_artisan() { |
||||
|
# Use newline as only separator to allow space in completion values |
||||
|
IFS=$'\n' |
||||
|
local sf_cmd="${COMP_WORDS[0]}" |
||||
|
|
||||
|
# for an alias, get the real script behind it |
||||
|
sf_cmd_type=$(type -t $sf_cmd) |
||||
|
if [[ $sf_cmd_type == "alias" ]]; then |
||||
|
sf_cmd=$(alias $sf_cmd | sed -E "s/alias $sf_cmd='(.*)'/\1/") |
||||
|
elif [[ $sf_cmd_type == "file" ]]; then |
||||
|
sf_cmd=$(type -p $sf_cmd) |
||||
|
fi |
||||
|
|
||||
|
if [[ $sf_cmd_type != "function" && ! -x $sf_cmd ]]; then |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
local cur prev words cword |
||||
|
_get_comp_words_by_ref -n := cur prev words cword |
||||
|
|
||||
|
local completecmd=("$sf_cmd" "_complete" "--no-interaction" "-sbash" "-c$cword" "-a1") |
||||
|
for w in ${words[@]}; do |
||||
|
w=$(printf -- '%b' "$w") |
||||
|
# remove quotes from typed values |
||||
|
quote="${w:0:1}" |
||||
|
if [ "$quote" == \' ]; then |
||||
|
w="${w%\'}" |
||||
|
w="${w#\'}" |
||||
|
elif [ "$quote" == \" ]; then |
||||
|
w="${w%\"}" |
||||
|
w="${w#\"}" |
||||
|
fi |
||||
|
# empty values are ignored |
||||
|
if [ ! -z "$w" ]; then |
||||
|
completecmd+=("-i$w") |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
local sfcomplete |
||||
|
if sfcomplete=$(${completecmd[@]} 2>&1); then |
||||
|
local quote suggestions |
||||
|
quote=${cur:0:1} |
||||
|
|
||||
|
# Use single quotes by default if suggestions contains backslash (FQCN) |
||||
|
if [ "$quote" == '' ] && [[ "$sfcomplete" =~ \\ ]]; then |
||||
|
quote=\' |
||||
|
fi |
||||
|
|
||||
|
if [ "$quote" == \' ]; then |
||||
|
# single quotes: no additional escaping (does not accept ' in values) |
||||
|
suggestions=$(for s in $sfcomplete; do printf $'%q%q%q\n' "$quote" "$s" "$quote"; done) |
||||
|
elif [ "$quote" == \" ]; then |
||||
|
# double quotes: double escaping for \ $ ` " |
||||
|
suggestions=$(for s in $sfcomplete; do |
||||
|
s=${s//\\/\\\\} |
||||
|
s=${s//\$/\\\$} |
||||
|
s=${s//\`/\\\`} |
||||
|
s=${s//\"/\\\"} |
||||
|
printf $'%q%q%q\n' "$quote" "$s" "$quote"; |
||||
|
done) |
||||
|
else |
||||
|
# no quotes: double escaping |
||||
|
suggestions=$(for s in $sfcomplete; do printf $'%q\n' $(printf '%q' "$s"); done) |
||||
|
fi |
||||
|
COMPREPLY=($(IFS=$'\n' compgen -W "$suggestions" -- $(printf -- "%q" "$cur"))) |
||||
|
__ltrim_colon_completions "$cur" |
||||
|
else |
||||
|
if [[ "$sfcomplete" != *"Command \"_complete\" is not defined."* ]]; then |
||||
|
>&2 echo |
||||
|
>&2 echo $sfcomplete |
||||
|
fi |
||||
|
|
||||
|
return 1 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
complete -F _sf_artisan artisan |
Write
Preview
Loading…
Cancel
Save
Reference in new issue