summaryrefslogtreecommitdiffstats
path: root/completions/svcadm
diff options
context:
space:
mode:
Diffstat (limited to 'completions/svcadm')
-rw-r--r--completions/svcadm81
1 files changed, 41 insertions, 40 deletions
diff --git a/completions/svcadm b/completions/svcadm
index 5269c7b..8505457 100644
--- a/completions/svcadm
+++ b/completions/svcadm
@@ -11,25 +11,25 @@
# but to not clutter the interface with all completions, we will only
# cut every completion alternative at the next slash.
#
-# For example, if the user types <nothing><tab>, we will propose for svc://foo/bar/bar/baz
-# the following completion: foo/, bar/ and baz
+# For example, if the user types <nothing><tab>, we will propose
+# for svc://foo/bar/bar/baz the following completion: foo/, bar/ and baz
# If the user types <b><tab>, we will propose: bar/ and baz
# If the user types <bar/><tab>, we will propose: bar/bar/ and bar/baz
#
-# By default, the function proproses only abbreviated completions except if the user already
-# began to type svc:. In that case we will propose only the complete FMRI beginning with the
-# pattern
+# By default, the function proproses only abbreviated completions except if the
+# user already began to type svc:. In that case we will propose only the
+# complete FMRI beginning with the pattern
#
-_smf_complete_fmri()
+_comp_cmd_svcadm__fmri()
{
local cur="$1" prefix="$2"
local cur_prefix fmri fmri_list=""
- local exact_mode pattern
+ local exact_mode="" pattern
if [[ $cur == $prefix* ]]; then
[[ $cur == "$prefix" ]] && cur+="/"
pattern="$cur*"
- exact_mode=1
+ exact_mode=set
else
pattern="$prefix*/$cur*"
fi
@@ -38,22 +38,22 @@ _smf_complete_fmri()
for fmri in $(svcs -H -o FMRI "$pattern" 2>/dev/null); do
local fmri_part_list fmri_part
- if [[ -z $exact_mode ]]; then
- fmri=${fmri#$prefix/}
+ if [[ ! $exact_mode ]]; then
+ fmri=${fmri#"$prefix/"}
- # we generate all possibles abbrevations for the FMRI
+ # we generate all possibles abbreviations for the FMRI
# no need to have a generic loop as we will have a finite
# number of components
- local ifs="$IFS"
- IFS="/"
- set -- $fmri
- IFS=$ifs
- case $# in
- 1) fmri_part_list=" $1" ;;
- 2) fmri_part_list=" $2 $1/$2" ;;
- 3) fmri_part_list=" $3 $2/$3 $1/$2/$3" ;;
- 4) fmri_part_list=" $4 $3/$4 $2/$3/$4 $1/$2/$3/$4" ;;
- esac
+ local -a tmp
+ if _comp_split -F / tmp "$fmri"; then
+ set -- "${tmp[@]}"
+ case $# in
+ 1) fmri_part_list=" $1" ;;
+ 2) fmri_part_list=" $2 $1/$2" ;;
+ 3) fmri_part_list=" $3 $2/$3 $1/$2/$3" ;;
+ 4) fmri_part_list=" $4 $3/$4 $2/$3/$4 $1/$2/$3/$4" ;;
+ esac
+ fi
else
fmri_part_list="$fmri"
fi
@@ -62,14 +62,14 @@ _smf_complete_fmri()
# we cut them at the first slash
for fmri_part in $fmri_part_list; do
[[ $fmri_part == $cur* ]] || continue
- local first_part=${fmri_part#$cur_prefix}
+ local first_part=${fmri_part#"$cur_prefix"}
first_part=$cur_prefix${first_part%%/*}
[[ $first_part != "$fmri_part" ]] && first_part+="/"
fmri_list+=" $first_part"
done
done
- COMPREPLY=($fmri_list)
+ _comp_split COMPREPLY "$fmri_list"
# here we want to detect if there only one completion proposed and that
# it ends with a slash. That means the users will still have to complete
@@ -83,7 +83,7 @@ _smf_complete_fmri()
((i--))
done
if ((i == 0)); then
- _smf_complete_fmri "${COMPREPLY[0]}" "$prefix"
+ _comp_cmd_svcadm__fmri "${COMPREPLY[0]}" "$prefix"
return
fi
fi
@@ -98,53 +98,54 @@ _smf_complete_fmri()
done
}
-_svcadm()
+_comp_cmd_svcadm()
{
- local cur prev words cword
- _init_completion -n : || return
+ local cur prev words cword comp_args
+ _comp_initialize -n : -- "$@" || return
local command_list="enable disable restart refresh clear mark milestone"
- local command i
+ local command="" i
for ((i = 1; i < cword; i++)); do
if [[ ${words[i]} == @(enable|disable|restart|refresh|clear|mark|milestone) ]]; then
command=${words[i]}
+ break
fi
done
- if [[ ! -v command ]]; then
+ if [[ ! $command ]]; then
if [[ ${cur} == -* ]]; then
- COMPREPLY=($(compgen -W "-v" -- ${cur}))
+ _comp_compgen -- -W "-v"
else
- COMPREPLY=($(compgen -W "$command_list" -- ${cur}))
+ _comp_compgen -- -W "$command_list"
fi
else
if [[ ${cur} == -* ]]; then
case "$command" in
enable)
- COMPREPLY=($(compgen -W "-r -s -t" -- ${cur}))
+ _comp_compgen -- -W "-r -s -t"
;;
disable)
- COMPREPLY=($(compgen -W "-s -t" -- ${cur}))
+ _comp_compgen -- -W "-s -t"
;;
mark)
- COMPREPLY=($(compgen -W "-I -t" -- ${cur}))
+ _comp_compgen -- -W "-I -t"
;;
milestone)
- COMPREPLY=($(compgen -W "-d" -- ${cur}))
+ _comp_compgen -- -W "-d"
;;
esac
else
- if [[ $command == "mark" ]] && [[ $prev != @(degraded|maintenance) ]]; then
- COMPREPLY=($(compgen -W "degraded maintenance" -- ${cur}))
+ if [[ $command == "mark" && $prev != @(degraded|maintenance) ]]; then
+ _comp_compgen -- -W "degraded maintenance"
elif [[ $command == "milestone" ]]; then
- _smf_complete_fmri "${cur}" "svc:/milestone"
+ _comp_cmd_svcadm__fmri "${cur}" "svc:/milestone"
else
- _smf_complete_fmri "${cur}" "svc:"
+ _comp_cmd_svcadm__fmri "${cur}" "svc:"
fi
fi
fi
} &&
- complete -F _svcadm svcadm
+ complete -F _comp_cmd_svcadm svcadm
# ex: filetype=sh