1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-06-01 12:56:04 +02:00

41560: cleanup chsh completion for different platforms

This commit is contained in:
Oliver Kiddle 2017-08-18 12:54:18 +02:00
parent 2b0bc3282f
commit ba6538637e
2 changed files with 67 additions and 35 deletions

View File

@ -1,3 +1,8 @@
2017-08-18 Oliver Kiddle <opk@zsh.org>
* 41560: Completion/Unix/Command/_chsh: cleanup chsh completion
for different platforms
2017-08-16 Oliver Kiddle <opk@zsh.org>
* Tomasz Pala: users/22834: Completion/Linux/Command/_modutils:

View File

@ -1,40 +1,67 @@
#compdef chsh chpass
local variant help=h
local -a args shells
case $OSTYPE in
(darwin*|*bsd*)
_arguments : \
'-s[Specify user login shell]:shell:(${(Z+Cn+)"$(</etc/shells)"})' \
"-l[Specify location of user]:node:" \
"-u[Specify authentication name]:auth user:" \
"1:user name:_users"
darwin*|*bsd*)
args=( '(-a)-s[specify new login shell]:shell:($shells)' )
;|
(free|net|open)bsd*)
args+=( '(-s 1)-a[specify user database entry]:passwd entry' )
;|
darwin*)
args+=(
'-l[specify location of user]:location'
'-u[specify authentication name]:auth user'
)
;;
(linux-gnu)
if { =chsh -v } >&/dev/null
then
local -a opts shells
shells=( $(=chsh -l) )
_arguments : \
"(-)-s[Specify your login shell]:shell:($shells)" \
"(-)--shell[Specify your login shell]:shell:($shells)" \
"(-)-l[Print shells in /etc/shells]" \
"(-)--list-shells[Print shells in /etc/shells]" \
"(-)-u[Print a usage message and exit]" \
"(-)--help[Print a usage message and exit]" \
"(-)-v[Print version information and exit]" \
"(-)--version[Print version information and exit]" \
"1:user name:_users"
return
fi
# else fall through
;&
(*)
local s=''
# Use $s to cause all options to be treated as mutually exclusive
[[ $words[CURRENT-1] = -* ]] && s="(-)$words[CURRENT-1]"
# This fiddling with $s is a hack to cause "_arguments : --" to use
# the /etc/shells listing for -s or --shell even when the description
# of that option has been pulled from the GNU --help output.
[[ $words[CURRENT-1] = (-s|--shell) ]] &&
s="$s"'[ ]:shell:(${(Z+Cn+)"$(</etc/shells)"})'
_arguments : $s "1:user name:_users" --
(free|net)bsd*)
args+=(
'(-y)-l[update only the local password file]'
'(-l)-y[force YP database entry to be changed]'
)
;|
freebsd*)
args+=(
'-p[specify encrypted password field]:password hash'
'-e[change account expire time]:expiry time'
'-d[specify NIS domain]:domain'
'-h[specify NIS server to query]:NIS server:_hosts'
'-o[force use of RPC-based updates]'
)
;;
(linux-gnu)
_pick_variant -r variant util-linux=util-linux suse=pwdutils debian -v
args=( -S : '(-)'{-s+,--shell=}'[specify new login shell]:shell:($shells)' )
case $variant in
suse|util-linux)
shells=( $(_call_program shells $words[1] -l) )
args+=(
'(-)'{-l,--list-shells}'[print shells in /etc/shells]'
'(-)'{-v,--version}'[display version information]'
)
help=u
;|
util-linux|debian)
args+=( '(-)-'{$help,-help}'[display help information]' )
;|
suse)
args+=(
'(-)'{-u,--usage}'[display short usage message]'
'(-)--help[display help information]'
'(-D --binddn)'{-D+,--binddn=}'[specify LDAP disingushed name to bind]:binddn'
'(-P --path)'{-P+,--path=}'[specify path to search for passwd and shadow files]:path:_directories'
'(-q --quiet)'{-q,--quiet}"[don't be verbose]"
'--service=[use specified name service]:service:(files nis nisplus ldap)'
)
;;
debian)
args+=( '(-R --root)'{-R+,--root=}'[specify directory to chroot into]:directory:_directories' )
;;
esac
;;
esac
(( $#shells )) || shells=( ${(Z+Cn+)"$(</etc/shells)"} )
_arguments $args '1:user name:_users'