summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_mkdir
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_mkdir')
-rw-r--r--Completion/Unix/Command/_mkdir41
1 files changed, 18 insertions, 23 deletions
diff --git a/Completion/Unix/Command/_mkdir b/Completion/Unix/Command/_mkdir
index f2299f7c7..53536b01d 100644
--- a/Completion/Unix/Command/_mkdir
+++ b/Completion/Unix/Command/_mkdir
@@ -4,35 +4,26 @@ local curcontext="$curcontext" state line expl args variant ret=1
typeset -A opt_args
args=(
- '(-m --mode)'{-m,--mode=}'[set permission mode]:numeric mode'
+ '(-m --mode)'{-m,--mode=}'[set permission mode]: :_file_modes'
'(-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
+#
+# $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*)
@@ -41,13 +32,17 @@ case $variant in
)
;|
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
- args=( '*: :->directories' )
;;
*) # non-GNU: remove long options
args=( ${${${args:#(|*\))--*}//--[^ )]#/}/\( #\)/} )