author | Danek Duvall <danek.duvall@oracle.com> |
Fri, 10 Jan 2014 13:37:47 -0800 | |
branch | s11-update |
changeset 2892 | 0309f67d63d6 |
parent 904 | 114a5240af22 |
permissions | -rw-r--r-- |
429
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
1 |
#autoload |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
2 |
|
904
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
3 |
local -a type expl_type_arr rsrc rdst paths_allowed |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
4 |
local -a typearg datasetlist expl mlist |
429
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
5 |
local expl_type |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
6 |
|
904
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
7 |
# -e takes an argument which is passed as as the "descr" argument to _wanted |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
8 |
# -p indicates that filesystem paths, not just dataset names, are allowed |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
9 |
# -r1 indicates that we're completing the source of a rename |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
10 |
# -r2 indicates that we're completing the destination of a rename |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
11 |
# -t takes arguments (what kinds of datasets) and can appear multiple times |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
12 |
zparseopts -D -E e:=expl_type_arr p=paths_allowed r1=rsrc r2=rdst t+:=type |
429
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
13 |
|
904
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
14 |
[[ -n $type[(r)fs] ]] && typearg=( filesystem ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
15 |
[[ -n $type[(r)vol] ]] && typearg=( $typearg volume ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
16 |
[[ -n $type[(r)snap] ]] && typearg=( $typearg snapshot ) |
2892
0309f67d63d6
18037934 zsh completion functions need updating to match 11.1
Danek Duvall <danek.duvall@oracle.com>
parents:
904
diff
changeset
|
17 |
[[ -n $type[(r)share] ]] && typearg=( $typearg share ) |
429
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
18 |
if [[ -n $typearg ]]; then |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
19 |
typearg=( -t ${(j:,:)typearg} ) |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
20 |
# We know we're in zfs list if paths_allowed is non-empty. |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
21 |
elif [[ -n $opt_args[-t] && ${#paths_allowed} -gt 0 ]]; then |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
22 |
typearg=( -t $opt_args[-t] ) |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
23 |
fi |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
24 |
|
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
25 |
if [[ ${#paths_allowed} -gt 0 && $PREFIX == /* ]]; then |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
26 |
_path_files |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
27 |
return |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
28 |
fi |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
29 |
|
904
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
30 |
if [[ ${#rsrc} -gt 0 ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
31 |
# With the -r option to zfs rename, we can only rename snapshots. With the |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
32 |
# -p option, we can only rename filesystems and volumes. |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
33 |
if [[ -n $words[(r)-r] ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
34 |
typearg=( -t snapshot ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
35 |
elif [[ -n $words[(r)-p] ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
36 |
typearg=( -t filesystem,volume ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
37 |
else |
2892
0309f67d63d6
18037934 zsh completion functions need updating to match 11.1
Danek Duvall <danek.duvall@oracle.com>
parents:
904
diff
changeset
|
38 |
typearg=( -t filesystem,share,snapshot,volume ) |
904
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
39 |
fi |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
40 |
fi |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
41 |
|
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
42 |
if [[ ${#rdst} -gt 0 ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
43 |
if [[ ${words[CURRENT - 1]} == *@* ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
44 |
# If we're renaming snapshots, there's nothing to complete, so |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
45 |
# we simply give instructions. (In non-recursive cases, we |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
46 |
# could put the name of the snapshotted dataset first, but why |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
47 |
# bother with the long form?) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
48 |
_message -e 'snapshot name (beginning with "@")' |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
49 |
return |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
50 |
else |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
51 |
# The parent dataset must be a filesystem, and can't rename |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
52 |
# a dataset into another pool. Plus we hardcode the expl. |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
53 |
typearg=( -t fs -r ${${words[CURRENT - 1]}%%/*} ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
54 |
expl_type_arr=( -e "parent dataset" ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
55 |
fi |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
56 |
fi |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
57 |
|
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
58 |
if [[ -n $type[(r)clone] ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
59 |
datasetlist=( ${="$(zfs list -H -o name,origin -t fs | awk "\$2 != \"-\" {print \$1}")":#no cloned filesystems available} ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
60 |
else |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
61 |
datasetlist=( ${="$(zfs list -H -o name $typearg)":#no datasets available} ) |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
62 |
fi |
429
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
63 |
|
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
64 |
expl_type=${typearg[2,-1]//,/\/} |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
65 |
if [[ -n $type[(r)mtpt] ]]; then |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
66 |
mlist=( ${="$(zfs list -H -o mountpoint $typearg)":#no mountpoints available} ) |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
67 |
datasetlist=( $datasetlist $mlist ) |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
68 |
expl_type="$expl_type/mountpoint" |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
69 |
fi |
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
70 |
|
904
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
71 |
if [[ -n $expl_type_arr[2] ]]; then |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
72 |
expl_type=$expl_type_arr[2] |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
73 |
fi |
114a5240af22
7179129 "zfs create" should be able to complete parent datasets
Danek Duvall <danek.duvall@oracle.com>
parents:
429
diff
changeset
|
74 |
|
429
02007d525e89
7021213 zsh completion for ipadm
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
75 |
_wanted dataset expl "$expl_type" _multi_parts "$@" -q / datasetlist |