From e8d1ef3613e4c43e0b0c08ac2a124f4cc99ab652 Mon Sep 17 00:00:00 2001 From: Clint Adams Date: Wed, 1 Nov 2006 03:04:13 +0000 Subject: 22940: completion for mkdir --- ChangeLog | 3 ++ Completion/Unix/Command/_mkdir | 70 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 Completion/Unix/Command/_mkdir diff --git a/ChangeLog b/ChangeLog index f2cabd3b5..322c96862 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-11-01 Clint Adams + * 22940: R. Ramkumar: Completion/Unix/Command/_mkdir: + completion for mkdir. + * users/9483: Sir Raorn(?): Completion/Unix/Command/_ri: completion for ri (ruby documentation viewer). diff --git a/Completion/Unix/Command/_mkdir b/Completion/Unix/Command/_mkdir new file mode 100644 index 000000000..b922875f3 --- /dev/null +++ b/Completion/Unix/Command/_mkdir @@ -0,0 +1,70 @@ +#compdef mkdir + +local curcontext="$curcontext" line state \ + args args_zsh args_cmd variant expl 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]' + ) + +args_zsh=('(-)*: :->dir') + +args_cmd=( + '(-v --verbose)'{-v,--verbose}'[print message for each created directory]' + '(- :)--help[display help information]' + '(- :)--version[display version information]' + '*: :->dir' + ) + +case "$OSTYPE" in + linux*) + args_cmd=( + '(-Z --context=)'{-Z,--context=}'[set SELinux context]:SELinux context' + $args_cmd) + ;; +esac + +_pick_variant -r variant gnu=gnu zsh='\(eval\)' unix --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 + +if [[ $variant == zsh ]]; then + args+=($args_zsh) +else + args+=($args_cmd) +fi + +# remove long options? +[[ $variant != gnu ]] && args=( ${${${args:#(|*\))--*}//--[^ )]#/}/\( #\)/} ) + +_arguments -C -s $args && ret=0 + +case "$state" in + dir) + if (( $ret )) && [[ ! -prefix - ]] || \ + [[ $variant == zsh && ${#${${words[2,-1]}:#-*}} -gt 0 ]]; then + _wanted parent-directory expl \ + 'parent directory (alternatively specify name of directory)' \ + _path_files -/ || _message 'name of directory' + ret=0 + fi + ;; +esac + +return ret -- cgit 1.4.1