match-taropts
- #!/usr/local/bin/zsh
- #
- local option
- local -i argpos
- local -i counter
- read -cn argpos
- #echo
- #echo $1_$2($argpos)
- if [[ "$1" = *[bCfFgKLNTVX]* ]]
- then
- # option with parameter present, before cursor.
- option=$1
- # check that the option with parameter is at the end of the string.
- if [[ $option[(i)[bCfFgKLNTVX]] = $#option ]]
- then
- # accept it, put a space after it.
- reply=($1$2\ )
- else
- # Very little we can do - best to disable completion.
- reply=( )
- fi
- return
- else
- # let $option contain the stripped-off options.
- option="$1${2%%[bCfFgKLNTVX]*}"
- #echo "{$option}"
- if [[ "$option" = *[Acdrtux]*[Acdrtux]* ]]
- then
- # multiple mandatory options; only one allowed - no completions.
- reply=( )
- elif [[ $argpos -gt 2 || "$option" = *[Acdrtux]* ]]
- then
- # single mandatory option already given; don't prompt for others.
- if [[ -n "$2" ]]
- then
- # not at end of string - only permit simple options.
- reply=(B G h i k l m M o O p P R s S v w W z Z)
- else
- # at end of string - permit options taking values.
- reply=(b C f F g K L N T V X B G h i k l m M o O p P R s S v w W z Z)
- fi
- else
- # prompt for mandatory option before allowing others.
- reply=(A c d r t u x)
- fi
- fi
- reply=($1${^reply}$2)
- #echo "($reply)"