summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-09-02 19:20:05 +0800
committerGitHub <noreply@github.com>2024-09-02 19:20:05 +0800
commit3c45ced2d96432a817cb6877b8eec235df892351 (patch)
treef421a784563f3688de6e16c279b4a0d8ad8e5bc0 /scripts
parentb34b542d31e8d42720676015497c619021aed00d (diff)
downloadaichat-3c45ced2d96432a817cb6877b8eec235df892351.tar.gz
refactor: improve bash completion (#824)
Diffstat (limited to 'scripts')
-rw-r--r--scripts/completions/aichat.bash36
1 files changed, 10 insertions, 26 deletions
diff --git a/scripts/completions/aichat.bash b/scripts/completions/aichat.bash
index 80660dc..9b6a462 100644
--- a/scripts/completions/aichat.bash
+++ b/scripts/completions/aichat.bash
@@ -1,12 +1,10 @@
_aichat() {
- local i cur prev opts cmd
+ local cur prev words cword i opts cmd
COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
- cmd=""
- opts=""
- for i in ${COMP_WORDS[@]}
+ _get_comp_words_by_ref -n : cur prev words cword
+
+ for i in ${words[@]}
do
case "${cmd},${i}" in
",$1")
@@ -20,33 +18,15 @@ _aichat() {
case "${cmd}" in
aichat)
opts="-m -r -s -a -R -e -c -f -S -h -V --model --prompt --role --session --save-session --agent --rag --serve --execute --code --file --no-stream --dry-run --info --list-models --list-roles --list-sessions --list-agents --list-rags --help --version"
- if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+ if [[ ${cur} == -* || ${cword} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
- # hacking -m or --model completion value that contains colon
- if [ "$cur" == ":" ] || [ "$prev" == ":" ]; then
- local option client
- if [ "$cur" = ":" ]; then
- option="${COMP_WORDS[COMP_CWORD-2]}"
- client="$prev"
- else
- option="${COMP_WORDS[COMP_CWORD-3]}"
- client="${COMP_WORDS[COMP_CWORD-2]}"
- fi
- if [ "$option" == "-m" ] || [ "$flag" == "--model" ]; then
- if [ "$cur" == ":" ]; then
- cur=""
- fi
- COMPREPLY=($(compgen -W "$("$1" --list-models | sed -n '/'"${client}"'/ s/'"${client%:*}"'://p')" -- "${cur}"))
- return 0
- fi
- fi
-
case "${prev}" in
-m|--model)
COMPREPLY=($(compgen -W "$("$1" --list-models)" -- "${cur}"))
+ __ltrim_colon_completions "$cur"
return 0
;;
--prompt)
@@ -55,18 +35,22 @@ _aichat() {
;;
-r|--role)
COMPREPLY=($(compgen -W "$("$1" --list-roles)" -- "${cur}"))
+ __ltrim_colon_completions "$cur"
return 0
;;
-s|--session)
COMPREPLY=($(compgen -W "$("$1" --list-sessions)" -- "${cur}"))
+ __ltrim_colon_completions "$cur"
return 0
;;
-a|--agent)
COMPREPLY=($(compgen -W "$("$1" --list-agents)" -- "${cur}"))
+ __ltrim_colon_completions "$cur"
return 0
;;
-R|--rag)
COMPREPLY=($(compgen -W "$("$1" --list-rags)" -- "${cur}"))
+ __ltrim_colon_completions "$cur"
return 0
;;
-f|--file)