1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-05 11:01:13 +02:00
zsh/Completion/Unix/Command/_mkdir
Oliver Kiddle ab7ec8d985 35011: update completions for some common Unix commands,
in particular improving FreeBSD support
2015-05-03 16:53:57 +02:00

67 lines
1.7 KiB
Text

#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