summaryrefslogtreecommitdiff
path: root/completions
diff options
context:
space:
mode:
authorVille Skyttä <ville.skytta@iki.fi>2011-11-26 23:28:08 +0200
committerVille Skyttä <ville.skytta@iki.fi>2011-11-26 23:32:30 +0200
commitafb2fdd010c34283314fc44ec3e7c8dbfea98a47 (patch)
treefa4bf34ee8d9d9e49a35125d86b949b197e43054 /completions
parent3a7f1d3de38aac9613a3647c3d1db367f34d2084 (diff)
downloadbash-completion-afb2fdd010c34283314fc44ec3e7c8dbfea98a47.tar.gz
export: Fix many use cases, add option completion.
Diffstat (limited to 'completions')
-rw-r--r--completions/export60
1 files changed, 48 insertions, 12 deletions
diff --git a/completions/export b/completions/export
index 557c52cb..42273a9e 100644
--- a/completions/export
+++ b/completions/export
@@ -3,23 +3,59 @@
_export()
{
local cur prev words cword
- _init_completion || return
+ _init_completion -n = || return
- case ${words[@]} in
- *=\$*)
- COMPREPLY=( $( compgen -v -P '$' -- "${cur#*=\$}" ) )
+ local i action=variable remove=false
+ for (( i=1; i < cword; i++ )); do
+ case ${words[i]} in
+ -p)
+ return
+ ;;
+ -*f*)
+ action=function
+ ;;&
+ -*n*)
+ remove=true
+ ;;
+ -*)
+ continue
+ ;;
+ esac
+ break
+ done
+
+ [[ $cur == *=\$* ]] && { cur=${cur#*=}; _variables; } && return
+
+ case $cur in
+ *=)
+ local pval=$( quote "$( eval printf %s \"\$${cur%=}\" )" )
+ # Complete previous value if it's not empty.
+ if [[ $pval != \'\' ]]; then
+ COMPREPLY=( "$pval" )
+ else
+ cur=${cur#*=}
+ _filedir
+ fi
;;
- *[^=])
- COMPREPLY=( $( compgen -v -S '=' -- "$cur" ) )
+ *=*)
+ cur=${cur#*=}
+ _filedir
;;
- *=)
- COMPREPLY=( "$( eval echo -n \"$`echo ${cur%=}`\" |
- ( echo -n \'
- sed -e 's/'\''/'\''\\\'\'''\''/g'
- echo -n \' ) )" )
+ *)
+ if [[ $cword -eq 1 && $cur == -* ]]; then
+ COMPREPLY=( $( compgen -W \
+ '-p $( _parse_usage "$1" )' -- "$cur" ) )
+ return
+ fi
+ local suffix
+ if ! $remove; then
+ suffix+==
+ compopt -o nospace
+ fi
+ COMPREPLY=( $( compgen -A $action -S "$suffix" -- "$cur" ) )
;;
esac
} &&
-complete -F _export -o default -o nospace export
+complete -F _export export
# ex: ts=4 sw=4 et filetype=sh