about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Base/_brace_parameter2
-rw-r--r--Completion/Base/_vars19
-rw-r--r--Completion/Builtins/_jobs2
-rw-r--r--Completion/Builtins/_kill3
-rw-r--r--Completion/Builtins/_limits2
-rw-r--r--Completion/Builtins/_wait2
-rw-r--r--Completion/Builtins/_zftp13
-rw-r--r--Completion/Core/_normal2
-rw-r--r--Completion/Core/_path_files4
-rw-r--r--Completion/Core/compdump2
-rw-r--r--Completion/Core/compinit4
-rw-r--r--Completion/Makefile.in16
12 files changed, 58 insertions, 13 deletions
diff --git a/Completion/Base/_brace_parameter b/Completion/Base/_brace_parameter
index f688e175a..5993aecba 100644
--- a/Completion/Base/_brace_parameter
+++ b/Completion/Base/_brace_parameter
@@ -16,4 +16,6 @@ ls="$RBUFFER[${#SUFFIX}+1,-1]"
 n=${(M)#ls##\"#}
 q=${(M)lp%%\"#}
 
+[[ n -gt 0 ]] && suf=''
+
 _parameters -s "${q[1,-n-1]}" -S "$suf" -r '-:?#%+=[/'
diff --git a/Completion/Base/_vars b/Completion/Base/_vars
index f06562694..a40df7699 100644
--- a/Completion/Base/_vars
+++ b/Completion/Base/_vars
@@ -1,3 +1,20 @@
 #compdef getopts read unset vared
 
-compgen -v
+# This will handle completion of keys of associative arrays, e.g. at
+# `vared compconfig[<TAB>'.  However, in this version the [ must be
+# added by hand.
+
+if [[ $PREFIX = *\[* ]]; then
+  local var=${PREFIX%%\[*}
+  local elt="${PREFIX#*\]}${SUFFIX%\]}"
+  local addclose
+  compset -p $(( ${#var} + 1 ))
+  if ! compset -S \]; then
+    addclose=(-S ']')
+  fi
+  if [[ ${(tP)var} = assoc* ]]; then
+    compadd $addclose - ${(kP)var}
+  fi
+else
+  compgen -v
+fi
diff --git a/Completion/Builtins/_jobs b/Completion/Builtins/_jobs
index bce005b4e..9e2da24c6 100644
--- a/Completion/Builtins/_jobs
+++ b/Completion/Builtins/_jobs
@@ -1,3 +1,3 @@
-#compdef fg jobs
+#compdef disown fg jobs
 
 compgen -j -P '%'
diff --git a/Completion/Builtins/_kill b/Completion/Builtins/_kill
index 979c87804..4f8c1db6d 100644
--- a/Completion/Builtins/_kill
+++ b/Completion/Builtins/_kill
@@ -9,7 +9,8 @@ else
 
   compgen -P '%' -j && ret=0
   list=("$(ps 2>/dev/null)")
-  compgen -y '$list' -s '`ps 2>/dev/null | tail +2 | cut -c1-5`' && ret=0
+  compgen -y '$list' -s '${${${(f)"$(ps 2>/dev/null)"}[2,-1]## #}%% *}' && 
+    ret=0
 
   return ret
 fi
diff --git a/Completion/Builtins/_limits b/Completion/Builtins/_limits
index be5c35593..6835a6244 100644
--- a/Completion/Builtins/_limits
+++ b/Completion/Builtins/_limits
@@ -1,3 +1,3 @@
 #compdef limit unlimit
 
-compgen -k "(${(j: :)${(f)$(limit)}%% *})"
+compgen -s '${${(f)"$(limit)"}%% *}'
diff --git a/Completion/Builtins/_wait b/Completion/Builtins/_wait
index 0fadc087b..41d09c9b2 100644
--- a/Completion/Builtins/_wait
+++ b/Completion/Builtins/_wait
@@ -4,6 +4,6 @@ local list ret=1
 
 compgen -P '%' -j && ret=0
 list=("$(ps 2>/dev/null)")
-compgen -y '$list' -s '`ps 2>/dev/null | tail +2 | cut -c1-5`' && ret=0
+compgen -y '$list' -s '${${${(f)"$(ps 2>/dev/null)"}[2,-1]## #}%% *}' && ret=0
 
 return ret
diff --git a/Completion/Builtins/_zftp b/Completion/Builtins/_zftp
index 71404fb2b..8792e21a7 100644
--- a/Completion/Builtins/_zftp
+++ b/Completion/Builtins/_zftp
@@ -43,6 +43,19 @@ case $subcom in
   compgen -k hosts
   ;;
 
+  *(goto|mark))
+  # complete bookmarks.  First decide if ncftp mode is go.
+  if [[ $words[2] = -*n* ]]; then
+    if [[ -f ~/.ncftp/bookmarks ]]; then
+      compadd - $(awk -F, 'NR > 2 { print $1 }' ~/.ncftp/bookmarks)
+    fi
+  else
+    if [[ -f ${ZFTP_BMFILE:=${ZDOTDIR:-$HOME}/.zfbkmarks} ]]; then
+      compadd - $(awk '{print $1}' $ZFTP_BMFILE)
+    fi
+  fi
+  ;;
+
   *)
   # dunno... try ordinary completion after all.
   unset _compskip
diff --git a/Completion/Core/_normal b/Completion/Core/_normal
index ed7243bb1..ba7f2123f 100644
--- a/Completion/Core/_normal
+++ b/Completion/Core/_normal
@@ -20,7 +20,7 @@ elif [[ "$command" == */* ]]; then
   cmd2="${command:t}"
 else
   cmd1="$command"
-  eval cmd2=$(whence -p $command)
+  cmd2=$(whence -p $command)
 fi
 
 # See if there are any matching pattern completions.
diff --git a/Completion/Core/_path_files b/Completion/Core/_path_files
index 332aba017..d0d1c6a0a 100644
--- a/Completion/Core/_path_files
+++ b/Completion/Core/_path_files
@@ -231,7 +231,7 @@ for prepath in "$prepaths[@]"; do
       # See which of them match what's on the line.
 
       tmp2=("$tmp1[@]")
-      compadd -D tmp1 "$ignore[@]" - "${(@)tmp1##*/}"
+      compadd -D tmp1 "$ignore[@]" - "${(@)tmp1:t}"
 
       # If no file matches, save the expanded path and continue with
       # the outer loop.
@@ -240,7 +240,7 @@ for prepath in "$prepaths[@]"; do
  	if [[ "$tmp2[1]" = */* ]]; then
 	  tmp2=( "${(@)tmp2#${prepath}${realpath}}" )
 	  if [[ "$tmp2[1]" = */* ]]; then
-	    exppaths=( "$exppaths[@]" ${^tmp2%/*}/${tpre}${tsuf} )
+	    exppaths=( "$exppaths[@]" ${^tmp2:h}/${tpre}${tsuf} )
           else
 	    exppaths=( "$exppaths[@]" ${tpre}${tsuf} )
 	  fi
diff --git a/Completion/Core/compdump b/Completion/Core/compdump
index 8288ccdd4..5ee04e028 100644
--- a/Completion/Core/compdump
+++ b/Completion/Core/compdump
@@ -74,7 +74,7 @@ done))
 # print them out:  about five to a line looks neat
 
 while (( $#_d_als )); do
-  print -n autoload
+  print -n autoload -U
   for (( _i = 0; _i < 5; _i++ )); do
     if (( $#_d_als )); then
       print -n " $_d_als[1]"
diff --git a/Completion/Core/compinit b/Completion/Core/compinit
index af2467bec..23bc94cf9 100644
--- a/Completion/Core/compinit
+++ b/Completion/Core/compinit
@@ -194,7 +194,7 @@ compdef() {
     # and probably do autoloading.
 
     func="$1"
-    [[ -n "$autol" ]] && autoload "$func"
+    [[ -n "$autol" ]] && autoload -U "$func"
     shift
 
     case "$type" in
@@ -363,7 +363,7 @@ if [[ -z "$_i_done" ]]; then
 	fi
 	;;
       (\#autoload)
-	autoload ${_i_file:t}
+	autoload -U ${_i_file:t}
 	;;
       esac
     done
diff --git a/Completion/Makefile.in b/Completion/Makefile.in
index 8b7776a7f..0ac4de304 100644
--- a/Completion/Makefile.in
+++ b/Completion/Makefile.in
@@ -55,7 +55,14 @@ install.fns:
 	  $(sdir_top)/mkinstalldirs $(fndir) || exit 1; \
 	  for file in $(FUNCTIONS_INSTALL); do \
 	    if test -f $$file; then \
-	      $(INSTALL_DATA) $$file $(fndir) || exit 1; \
+	      if test x$(FUNCTIONS_SUBDIRS) != x -a \
+	      x$(FUNCTIONS_SUBDIRS) != xno; then \
+	        subdir="`echo $$file | sed -e 's%/.*%%'`"; \
+	        $(sdir_top)/mkinstalldirs $(fndir)/$$subdir || exit 1; \
+	        $(INSTALL_DATA) $$file $(fndir)/$$subdir || exit 1; \
+	      else \
+	        $(INSTALL_DATA) $$file $(fndir) || exit 1; \
+	      fi; \
 	    fi; \
 	  done; \
 	fi; \
@@ -65,7 +72,12 @@ uninstall.fns:
 	if test x$(fndir) != x && test x$(fndir) != xno; then \
 	  for file in $(FUNCTIONS_INSTALL); do \
 	    if test -f $$file; then \
-	      rm -f "$(fndir)/`echo $$file | sed -e 's%^.*/%%'`"; \
+	      if test x$(FUNCTIONS_SUBDIRS) != x -a \
+              x$(FUNCTIONS_SUBDIRS) != xno; then \
+	        rm -f $(fndir)/$$file; \
+	      else \
+	        rm -f "$(fndir)/`echo $$file | sed -e 's%^.*/%%'`"; \
+	      fi; \
 	    fi; \
 	  done; \
 	fi; \