summaryrefslogtreecommitdiffstats
path: root/Completion/BSD/Command/_mdo
blob: 9bb5224e84e4d414169bafcd609b0dd0f281589d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#compdef mdo

local environ e cmd cpp sep
local -a _comp_priv_prefix suf reset
local curcontext="$curcontext" state line expl
local -A opt_args

zstyle -a ":completion:${curcontext}:" environ environ

for e in "${environ[@]}"
do local -x "$e"
done

cmd="$words[1]"
cpp='_comp_priv_prefix=( $cmd ${(kv)opt_args} )'
_arguments -s -S -A '-*' : \
  '(- *)-h[display usage information]' \
  '--euid=[override effective user]:user:_users' \
  '--egid=[override effective group]:group:_groups' \
  '-G+[set supplementary groups]:group:_sequence _groups' \
  '-g+[set primary group]:group:_groups' \
  '-i[keep current primary and supplementary groups]' \
  '(-u -i)-k[use current credentials as baseline]' \
  '--ruid=[override real user]:user:_users' \
  '--rgid=[override real group]:group:_groups' \
  '-s+[incrementally modify the supplementary groups set]: :->group-mods' \
  '--svuid=[override saved user]:user:_users' \
  '--svgid=[override saved group]:group:_groups' \
  '-u+[run command as specified user]: :_users' \
  "(-)1: :{ $cpp; _command_names -e }" \
  "*:: :{ $cpp; _normal }" && return

if [[ $state = group-mods ]]; then
  line=(
    $opt_args[-g] ${(s.,.)opt_args[-G]}
    ${${(s.,.)${(M)PREFIX##*,}}#[-+@]}
    ${${(s.,.)${(M)SUFFIX%%,*}}#[-+@]}
  )
  compset -P '*,' || reset=( @ )
  compset -S ',*' || suf=( -qS, )
  if ! compset -P '[-+@]'; then
    zstyle -s ":completion:${curcontext}:modifiers" list-separator sep || sep=--
    _wanted modifiers expl 'group modifier' compadd -S "" -d \
        "(-\ $sep\ exclude +\ $sep\ include @\ $sep\ reset)" - - + $reset
  else
    _wanted groups expl group _groups $suf -F line
  fi
fi