#compdef mkdir gmkdir zf_mkdir local curcontext="$curcontext" state line expl args variant ret=1 typeset -A opt_args args=( '(-m --mode)'{-m,--mode=}'[set permission mode]:numeric mode' '(-p --parents)'{-p,--parents}'[make parent directories as needed]' '(-)*: :->directories' ) case "$OSTYPE" in linux*) args+=( '(-Z --context)'{-Z,--context=}'[set SELinux context]:SELinux context' ) ;; esac _pick_variant -r variant gnu=gnu zsh='\(eval\)' $OSTYPE --help # It can still happen that there is a precommand command or builtin in the line. # In such cases, the variant has to be modified suitably, after further checking # the variant of the _command_ mkdir. # I currently don't know of any way to find out what precommands are present on # the line. The variant should be modified like this once a way is found out: # if [[ $variant == zsh ]]; then # if [[ $precommand = *command* ]]; then # _mkdir_command () { command mkdir "$@" } # _pick_variant -c _mkdir_command -r variant gnu=gnu unix --help # fi # elif [[ $precommand = *builtin* ]]; then # variant=zsh # fi case $variant in gnu|freebsd*|dragonfly*) args+=( '(-v --verbose)'{-v,--verbose}'[print message for each created directory]' ) ;| gnu) args+=( '(- :)--help[display help information]' '(- :)--version[display version information]' ) ;; zsh) # remove all options args=( '*: :->directories' ) ;; *) # non-GNU: remove long options args=( ${${${args:#(|*\))--*}//--[^ )]#/}/\( #\)/} ) ;; esac _arguments -C -s $args && ret=0 case "$state" in directories) _wanted directories expl \ 'parent directory (alternatively specify name of directory)' \ _path_files -/ && ret=0 ;; esac return ret