102 lines
2.3 KiB
Text
102 lines
2.3 KiB
Text
_pipesz_module()
|
|
{
|
|
local WORD OPTS OPTARG OPTEND SOPT LOPT TARG
|
|
local SOPTS=(g s f n i o e c q v h V)
|
|
local LOPTS=(get set file fd stdin stdout stderr check quiet verbose help version)
|
|
local AOPTS=(0 1 1 1 0 0 0 0 0 0 0 0) # takes argument
|
|
local TOPTS=(1 0 1 1 1 1 1 0 0 0 0 0) # specifies target
|
|
local XOPTS=(0 0 0 0 0 0 0 0 0 0 1 1) # exits immediately
|
|
local MOPTS=(0 0 1 1 0 0 0 0 0 0 0 0) # repeatable
|
|
local NOPTS=(0 0 0 0 0 0 0 0 0 0 0 0) # number of repeats
|
|
local IDXG=0 IDXS=1 # index of --get and --set
|
|
|
|
for ((i=1; i<COMP_CWORD; i++)); do
|
|
WORD=${COMP_WORDS[i]}
|
|
|
|
if [[ ${NOPTS[$IDXG]} -eq 0 ]]; then
|
|
case $WORD in
|
|
--)
|
|
_command_offset $((i+1))
|
|
return 0;;
|
|
[^-]*)
|
|
_command_offset $i
|
|
return 0;;
|
|
esac
|
|
fi
|
|
|
|
for ((j=0; j<${#NOPTS[@]}; j++)); do
|
|
SOPT=${SOPTS[$j]}
|
|
LOPT=${LOPTS[$j]}
|
|
|
|
case $WORD in
|
|
--$LOPT) OPTEND=l;;
|
|
--*) continue;;
|
|
-*$SOPT) OPTEND=s;;
|
|
-*$SOPT*) OPTEND=n;;
|
|
*) continue;;
|
|
esac
|
|
|
|
if [[ ${XOPTS[$j]} -ne 0 ]]; then
|
|
COMPREPLY=()
|
|
return 0
|
|
fi
|
|
|
|
((NOPTS[j]++))
|
|
|
|
[[ ${TOPTS[$j]} -ne 0 ]] && TARG=y
|
|
[[ $OPTEND != n ]] && ((i+=AOPTS[j]))
|
|
[[ $OPTEND == l ]] && break
|
|
done
|
|
done
|
|
|
|
case $3 in
|
|
--fd) OPTARG=n;;
|
|
--file) OPTARG=f;;
|
|
--size) OPTARG=s;;
|
|
--*) ;;
|
|
-*n) OPTARG=n;;
|
|
-*f) OPTARG=f;;
|
|
-*s) OPTARG=s;;
|
|
esac
|
|
|
|
case $OPTARG in
|
|
f)
|
|
compopt -o filenames
|
|
COMPREPLY=( $(compgen -f -- "$2") )
|
|
return 0;;
|
|
n)
|
|
COMPREPLY=( $(compgen -W "0 1 2" -- "$2") )
|
|
return 0;;
|
|
s)
|
|
WORD=$2
|
|
if [[ ! $WORD =~ ^[0-9]+[a-zA-Z]*$ ]]; then
|
|
COMPREPLY=()
|
|
return 0
|
|
fi
|
|
|
|
while [[ $WORD =~ [a-zA-Z]$ ]]; do WORD=${WORD:0:-1}; done
|
|
|
|
compopt -o nosort
|
|
COMPREPLY=( $(compgen -W "$WORD $WORD{K,M,G}{B,iB}" -- "$2") )
|
|
return 0;;
|
|
esac
|
|
|
|
for ((j=0; j<${#NOPTS[@]}; j++)); do
|
|
[[ $j -eq $IDXG && ${NOPTS[$IDXS]} -ne 0 ]] && continue
|
|
[[ $j -eq $IDXS && ${NOPTS[$IDXG]} -ne 0 ]] && continue
|
|
[[ $COMP_CWORD -ne 1 && ${XOPTS[$j]} -ne 0 ]] && continue
|
|
[[ ${NOPTS[$j]} -gt 0 && ${MOPTS[$j]} -eq 0 ]] && continue
|
|
|
|
[[ $2 != --* && $2 == -* ]] && OPTS+=" -${SOPTS[$j]}"
|
|
OPTS+=" --${LOPTS[$j]}"
|
|
done
|
|
|
|
if [[ ! $TARG || ${NOPTS[$IDXG]} -ne 0 ]]; then
|
|
COMPREPLY=( $(compgen -W "$OPTS" -- "$2") )
|
|
else
|
|
compopt -o filenames
|
|
COMPREPLY=( $(compgen -c -W "$OPTS --" -- "$2") )
|
|
fi
|
|
}
|
|
|
|
complete -F _pipesz_module pipesz
|