#compdef su local -A opt_args local -a args state context local shell=${words[(i)(-s|--shell=*)]} first='1:user name:_users' local usr=root line if _pick_variant gnu="Free Software Foundation" unix --version; then args=( '(--command)-c[pass command to shell]:command string:->command' '(-c)--command=-[pass command to shell]:command string:->command' '-f[pass -f to shell (csh)]' '(--login)-l[use a login shell]' '(-l)--login[use a login shell]' '(-p --preserve-environment)-m[do not reset environment]' '(-m --preserve-environment)-p[do not reset environment]' '(-m -p)--preserve-environment[do not reset environment]' '(--shell)-s[run the specified shell]:shell:->shell' '(-s)--shell=-[run the specified shell]:shell:->shell' ) else args=( '-c[pass command to shell]:command string:->command' '-l[use a login shell]' '-s[run the specified shell]:shell:->shell' ) fi if [[ $#words -ge 2 && $words[2] != -* && CURRENT -ne 2 ]]; then usr=$words[2] first= fi [[ $words[shell] == -s ]] && ((shell++)) if [[ CURRENT -ne shell && -n ${words[shell]} ]]; then shell=${words[shell]#*=} else shell="${${(M@)${(@f)$(rest" && return case $state in (command) compset -q _normal return ;; (shell) compadd ${(f)^"$(