From 4bea58d0c41f5b0d1bb70244c51f956f60b576e4 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sat, 6 Feb 2021 00:22:15 +0100 Subject: 47919: use common function for completing BSD login classes also update for options to env on FreeBSD and Dragonfly --- ChangeLog | 6 ++++++ Completion/BSD/Type/_login_classes | 4 ++++ Completion/Unix/Command/_env | 34 +++++++++++++++++++++++++++------- Completion/Unix/Command/_pgrep | 3 +-- Completion/Unix/Command/_su | 2 +- Completion/Unix/Command/_user_admin | 2 +- 6 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 Completion/BSD/Type/_login_classes diff --git a/ChangeLog b/ChangeLog index 08c18dba8..40c58037d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2021-02-06 Oliver Kiddle + * 47919: Completion/BSD/Type/_login_classes, + Completion/Unix/Command/_env, Completion/Unix/Command/_pgrep, + Completion/Unix/Command/_su, Completion/Unix/Command/_user_admin: + use common function for completing BSD login classes and update for + options to env + * 47918: Completion/Linux/Command/_nsenter, Completion/Linux/Command/_unshare: new util-linux completions diff --git a/Completion/BSD/Type/_login_classes b/Completion/BSD/Type/_login_classes new file mode 100644 index 000000000..227e3c748 --- /dev/null +++ b/Completion/BSD/Type/_login_classes @@ -0,0 +1,4 @@ +#autoload + +_description login-classes expl 'login class' +compadd "$@" "$expl[@]" - ${${(M)${(f)"$(user-class' + '-U[add variables from user and system login.conf(5)]: :->user-class' + ) + ;| + freebsd*|darwin*|dragonfly*) + args+=( '(-i)*-u+[remove variable from the environment]:env var to remove:_parameters -g "*export*"' '-P+[specify alternate executable search PATH]:path:_dir_list' '-S+[perform word splitting]:string to split' @@ -44,11 +52,23 @@ _arguments $args \ '*::arguments:->normal' && ret=0 if [[ -n $state ]]; then - while [[ $words[1] = *=* ]]; do - shift words - (( CURRENT-- )) - done - _normal && ret=0 + case $state in + normal) + while [[ $words[1] = *=* ]]; do + shift words + (( CURRENT-- )) + done + _normal && ret=0 + ;; + user-class) + if compset -P 1 '*/'; then + _login_classes && ret=0 + else + compset -S '/*' || suf=( -qS/ ) + _users $suf && ret=0 + fi + ;; + esac fi return ret diff --git a/Completion/Unix/Command/_pgrep b/Completion/Unix/Command/_pgrep index 3f00b21dc..49184307f 100644 --- a/Completion/Unix/Command/_pgrep +++ b/Completion/Unix/Command/_pgrep @@ -5,7 +5,6 @@ # (which changed the behaviour of -f and added -a) # - We don't really need to keep pgopts and pkopts separate, but it seems like # it should make things a bit easier to follow -# - @todo We could complete log-in classes given to -c # - @todo We could complete routing tables given to -T local curcontext="$curcontext" state line ret=1 expl pgopts pkopts no @@ -18,7 +17,7 @@ typeset -a arguments sig_arguments aopts # overridden below arguments=( '-a[include process ancestors in match list]' - '-c+[match only on specified login class]:login class' + '-c+[match only on specified login class]:login class:_login_classes' '(-F --pidfile)'{-F+,--pidfile=}'[match only processes in specified PID file]:PID file:_files' '(-f --full)'{-f,--full}'[match against full command line]' '(-G --group)'{-G+,--group=}'[match only on specified real group IDs]: :_sequence _groups' diff --git a/Completion/Unix/Command/_su b/Completion/Unix/Command/_su index 066f5c3b6..1af751a17 100644 --- a/Completion/Unix/Command/_su +++ b/Completion/Unix/Command/_su @@ -35,7 +35,7 @@ case $OSTYPE in ;| *bsd*|dragonfly*) args+=( - '-c+[use settings from specified login class]:class' + '-c+[use settings from specified login class]:class:_login_classes' ) ;| freebsd*) args+=( '-s[set the MAC label]' ) ;; diff --git a/Completion/Unix/Command/_user_admin b/Completion/Unix/Command/_user_admin index c7e1efc80..db1c977ad 100644 --- a/Completion/Unix/Command/_user_admin +++ b/Completion/Unix/Command/_user_admin @@ -54,7 +54,7 @@ case ${service%???}:${(M)service%???}:$OSTYPE in ;| user:*:(net|open)bsd*) args+=( - '-L[specify login class]:login class' + '-L[specify login class]:login class:_login_classes' '-p+[specify encrypted password]:encrypted password' ) ;| -- cgit 1.4.1