components/zsh/Completion/Unix/Type/_zfs_dataset
changeset 429 02007d525e89
child 904 114a5240af22
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/zsh/Completion/Unix/Type/_zfs_dataset	Wed Jul 20 16:57:37 2011 -0700
@@ -0,0 +1,32 @@
+#autoload
+
+local -a type paths_allowed typearg datasetlist expl
+local expl_type
+
+zparseopts -D -E t+:=type p=paths_allowed
+
+[[ -n $type[(r)fs] ]]   && typearg=( filesystem )
+[[ -n $type[(r)vol] ]]  && typearg=( $typearg volume )
+[[ -n $type[(r)snap] ]] && typearg=( $typearg snapshot )
+if [[ -n $typearg ]]; then
+	typearg=( -t ${(j:,:)typearg} )
+# We know we're in zfs list if paths_allowed is non-empty.
+elif [[ -n $opt_args[-t] && ${#paths_allowed} -gt 0 ]]; then
+	typearg=( -t $opt_args[-t] )
+fi
+
+if [[ ${#paths_allowed} -gt 0 && $PREFIX == /* ]]; then
+	_path_files
+	return
+fi
+
+datasetlist=( ${="$(zfs list -H -o name $typearg)":#no datasets available} )
+
+expl_type=${typearg[2,-1]//,/\/}
+if [[ -n $type[(r)mtpt] ]]; then
+	mlist=( ${="$(zfs list -H -o mountpoint $typearg)":#no mountpoints available} )
+	datasetlist=( $datasetlist $mlist )
+	expl_type="$expl_type/mountpoint"
+fi
+
+_wanted dataset expl "$expl_type" _multi_parts "$@" -q / datasetlist