summaryrefslogtreecommitdiff
path: root/Completion/User/_groups
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/User/_groups')
-rw-r--r--Completion/User/_groups19
1 files changed, 16 insertions, 3 deletions
diff --git a/Completion/User/_groups b/Completion/User/_groups
index 975189174..27444d26d 100644
--- a/Completion/User/_groups
+++ b/Completion/User/_groups
@@ -1,6 +1,19 @@
#compdef newgrp
-: ${(A)groups:=${${(s: :)$(</etc/group)}%%:*}}
-# : ${(A)groups:=${${(s: :)$(ypcat group.byname)}%%:*}} # If you use NIS
+local expl groups tmp
-compadd $groups
+_wanted groups || return 1
+
+if ! zstyle -a ":completion:${curcontext}:" groups groups; then
+ (( $+_cache_groups )) ||
+ if (( ${+commands[ypcat]} )) &&
+ tmp=$(_call groups ypcat group.byname); then
+ : ${(A)_cache_groups:=${${(f)tmp}%%:*}} # If you use YP
+ else
+ : ${(A)_cache_groups:=${${(s: :)$(</etc/group)}%%:*}}
+ fi
+
+ groups=( "$_cache_groups[@]" )
+fi
+
+_all_labels groups expl group compadd "$@" - "$groups[@]"