#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]: :_file_modes' '(-p --parents)'{-p,--parents}'[make parent directories as needed]' '(-)*: :->directories' ) # 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. # # $precommands is defined in _main_complete if (( ${+precommands[(r)command]} )); then _mkdir_command () { command mkdir "$@" } _pick_variant -c _mkdir_command -r variant gnu=gnu unix --help unfunction _mkdir_command elif (( ${+precommands[(r)builtin]} )) || (( ${+builtins[mkdir]} )) || [[ "$(type -w mkdir)" == "*: builtin" ]]; then variant=zsh else _pick_variant -r variant gnu=gnu zsh='\(eval\)' $OSTYPE --help fi # Now $variant is set. case $variant in gnu|freebsd*|dragonfly*) args+=( '(-v --verbose)'{-v,--verbose}'[print message for each created directory]' ) ;| gnu) if [[ $OSTYPE == linux* ]]; then args+=( '(-Z --context)'{-Z,--context=}'[set SELinux context]:SELinux context' ) fi args+=( '(- :)--help[display help information]' '(- :)--version[display version information]' ) ;; zsh) # remove all options ;; *) # 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