From: Ronan Pigott <rpig...@berkeley.edu>

Signed-off-by: Ronan Pigott <rpig...@berkeley.edu>
---
 scripts/completion/zsh_completion.in | 96 +++++++++++++++++++++++++++-
 1 file changed, 95 insertions(+), 1 deletion(-)

diff --git a/scripts/completion/zsh_completion.in 
b/scripts/completion/zsh_completion.in
index 92fc2382..e4bf3312 100644
--- a/scripts/completion/zsh_completion.in
+++ b/scripts/completion/zsh_completion.in
@@ -1,4 +1,4 @@
-#compdef pacman pacman.static=pacman pacman-key makepkg
+#compdef pacman pacman.static=pacman pacman-conf pacman-key makepkg
 
 # copy this file to /usr/share/zsh/site-functions/_pacman
 
@@ -496,6 +496,97 @@ _pacman_zsh_comp() {
        esac
 }
 
+_pacman_conf_general_directives=(
+       'RootDir'
+       'DBPath'
+       'CacheDir'
+       'HookDir'
+       'GPGDir'
+       'LogFile'
+       'HoldPkg'
+       'IgnorePkg'
+       'NoUpgrade'
+       'NoExtract'
+       'Architecture'
+       'XferCommand'
+       'UseSyslog'
+       'Color'
+       'TotalDownload'
+       'CheckSpace'
+       'VerbosePkgLists'
+       'DisableDownloadTimeout'
+       'NoProgressBar'
+       'ParallelDownloads'
+       'CleanMethod'
+       'SigLevel'
+       'LocalFileSigLevel'
+       'RemoteFileSigLevel'
+)
+
+_pacman_conf_repo_directives=(
+       'Server'
+       'SigLevel'
+       'Usage'
+)
+
+_pacman_conf_completions_repositories() {
+       local -a repositories
+       # If the user specified an alternate config, use those repos
+       repositories=($(pacman-conf ${(kv)opt_args[(I)-c|--config]} --repo-list 
))
+       typeset -U repositories
+       compadd "$@" -a repositories
+}
+
+_pacman_conf_directive() {
+       # Directives use a case-insensitive matcher-list
+       local casematch="m:{[:lower:][:upper:]}={[:upper:][:lower:]}"
+
+       if [[ -n ${opt_args[(I)-r|--repo]} ]]; then
+               compadd -M "$casematch" "$@" -a _pacman_conf_repo_directives
+       else
+               if [[ $words[$CURRENT] == [iI][lL]* ]]; then
+                       compadd -M "$casematch" "$@" ILoveCandy # Secret 
completion!
+               else
+                       compadd -M "$casematch" "$@" -a 
_pacman_conf_general_directives
+               fi
+       fi
+}
+
+_pacman_conf_commands=(
+       {-l,--repo-list}'[List configured repositories]:*: :->repo_list'
+       {-h,--help}'[Output systax and command line options]:*: :->complete'
+       {-V,--version}'[Display version and exit]:*: :->complete'
+)
+
+_pacman_conf_options=(
+       '(-r --repo)'{-r,--repo=}'[Query options for a specific 
repository]:package repo:_pacman_conf_completions_repositories'
+       '(-v --verbose)'{-v,--verbose}'[Always show directive names]'
+)
+
+_pacman_conf_options_common=(
+       '*'{-c,--config=}'[Specify an alternate configuration file]: :_files'
+       '*'{-R,--rootdir=}'[Specify an alternate insallation root]: :_files'
+)
+
+_pacman_conf() {
+       _arguments -s : \
+               "$_pacman_conf_commands[@]" \
+               "$_pacman_conf_options_common[@]" \
+               "$_pacman_conf_options[@]" \
+               '*:pacman directive:_pacman_conf_directive'
+
+       case $state in
+               repo_list)
+                       _arguments -s \
+                               '(-l --repo-list)'{-l,--repo-list} \
+                               "$_pacman_conf_options_common[@]"
+                       ;;
+               *)
+                       _message "no more arguments"
+                       ;;
+       esac
+}
+
 _key_shortopts=(
        '-h[show help]'
        '-a[Add the specified keys (empty for stdin)]: :_files'
@@ -704,6 +795,9 @@ _pacman_comp() {
                makepkg)
                        _makepkg "$@"
                        ;;
+               pacman-conf)
+                       _pacman_conf "$@"
+                       ;;
                pacman-key)
                        _pacman_key "$@"
                        ;;
-- 
2.28.0

Reply via email to