From 5996e28e322584a18b72831582cdd4a533568ef2 Mon Sep 17 00:00:00 2001 From: morganamilo Date: Thu, 30 Aug 2018 11:32:14 +0100 Subject: [PATCH] Use tabs and use pacman-conf over config parsing This makes our zsh completion more similar to pacmans. Making it easier to view diffs between the two. --- completions/zsh | 928 ++++++++++++++++++++++++------------------------ 1 file changed, 464 insertions(+), 464 deletions(-) diff --git a/completions/zsh b/completions/zsh index ed1dd572..71417205 100644 --- a/completions/zsh +++ b/completions/zsh @@ -6,598 +6,598 @@ setopt extendedglob # options for passing to _arguments: main pacman commands _pacman_opts_commands=( - {-D,--database}'[Modify database]' - {-F,--files}'[Query the files database]' - {-G,--getpkgbuild}'[Get PKGBUILD from ABS or AUR]' - {-Q,--query}'[Query the package database]' - {-R,--remove}'[Remove a package from the system]' - {-P,--print}'[Print yay information]' - {-S,--sync}'[Synchronize packages]' - {-T,--deptest}'[Check if dependencies are installed]' - {-U,--upgrade}'[Upgrade a package]' - {-Y,--yay}'[Yay specific options]' - {-V,--version}'[Display version and exit]' - '(-h --help)'{-h,--help}'[Display usage]' + {-D,--database}'[Modify database]' + {-F,--files}'[Query the files database]' + {-G,--getpkgbuild}'[Get PKGBUILD from ABS or AUR]' + {-Q,--query}'[Query the package database]' + {-R,--remove}'[Remove a package from the system]' + {-P,--print}'[Print yay information]' + {-S,--sync}'[Synchronize packages]' + {-T,--deptest}'[Check if dependencies are installed]' + {-U,--upgrade}'[Upgrade a package]' + {-Y,--yay}'[Yay specific options]' + {-V,--version}'[Display version and exit]' + '(-h --help)'{-h,--help}'[Display usage]' ) # options for passing to _arguments: options common to all commands _pacman_opts_common=( - '--repo[Assume targets are from the repositories]' - {-a,--aur}'[Assume targets are from the AUR]' - '--aururl[Set an alternative AUR URL]:url' - '--arch[Set an alternate architecture]' - {-b,--dbpath}'[Alternate database location]:database_location:_files -/' - '--color[colorize the output]:color options:(always never auto)' - {-h,--help}'[Display syntax for the given operation]' - {-r,--root}'[Set alternate installation root]:installation root:_files -/' - {-v,--verbose}'[Be more verbose]' - '--cachedir[Alternate package cache location]:cache_location:_files -/' - '--config[An alternate configuration file]:config file:_files' - '--makepkgconf[makepkg.conf file to use]:config file:_files' - '--nomakepkgconf[Use the default makepkg.conf]' - '--requestsplitn[Max amount of packages to query per AUR request]:number' - '--completioninterval[Time in days to to refresh completion cache]:number' - '--confirm[Always ask for confirmation]' - '--debug[Display debug messages]' - '--gpgdir[Set an alternate directory for GnuPG (instead of /etc/pacman.d/gnupg)]: :_files -/' - '--hookdir[Set an alternate hook location]: :_files -/' - '--logfile[An alternate log file]:config file:_files' - '--noconfirm[Do not ask for confirmation]' - '--noprogressbar[Do not show a progress bar when downloading files]' - '--noscriptlet[Do not execute the install scriptlet if one exists]' + '--repo[Assume targets are from the repositories]' + {-a,--aur}'[Assume targets are from the AUR]' + '--aururl[Set an alternative AUR URL]:url' + '--arch[Set an alternate architecture]' + {-b,--dbpath}'[Alternate database location]:database_location:_files -/' + '--color[colorize the output]:color options:(always never auto)' + {-h,--help}'[Display syntax for the given operation]' + {-r,--root}'[Set alternate installation root]:installation root:_files -/' + {-v,--verbose}'[Be more verbose]' + '--cachedir[Alternate package cache location]:cache_location:_files -/' + '--config[An alternate configuration file]:config file:_files' + '--makepkgconf[makepkg.conf file to use]:config file:_files' + '--nomakepkgconf[Use the default makepkg.conf]' + '--requestsplitn[Max amount of packages to query per AUR request]:number' + '--completioninterval[Time in days to to refresh completion cache]:number' + '--confirm[Always ask for confirmation]' + '--debug[Display debug messages]' + '--gpgdir[Set an alternate directory for GnuPG (instead of /etc/pacman.d/gnupg)]: :_files -/' + '--hookdir[Set an alternate hook location]: :_files -/' + '--logfile[An alternate log file]:config file:_files' + '--noconfirm[Do not ask for confirmation]' + '--noprogressbar[Do not show a progress bar when downloading files]' + '--noscriptlet[Do not execute the install scriptlet if one exists]' - '--save[Causes config options to be saved back to the config file]' + '--save[Causes config options to be saved back to the config file]' - '--builddir[Directory to use for building AUR Packages]:build dir:_files -/' - '--editor[Editor to use when editing PKGBUILDs]:editor:_files' - '--editorflags[Flags to pass to editor]' - '--makepkg[makepkg command to use]:makepkg:_files' - '--pacman[pacman command to use]:pacman:_files' - '--tar[bsdtar command to use]:tar:_files' - '--git[git command to use]:git:_files' - '--gpg[gpg command to use]:gpg:_files' + '--builddir[Directory to use for building AUR Packages]:build dir:_files -/' + '--editor[Editor to use when editing PKGBUILDs]:editor:_files' + '--editorflags[Flags to pass to editor]' + '--makepkg[makepkg command to use]:makepkg:_files' + '--pacman[pacman command to use]:pacman:_files' + '--tar[bsdtar command to use]:tar:_files' + '--git[git command to use]:git:_files' + '--gpg[gpg command to use]:gpg:_files' - '--sortby[Sort AUR results by a specific field during search]:sortby options:(votes popularity id baseid name base submitted modified)' - '--answerclean[Set a predetermined answer for the clean build menu]:answer' - '--answeredit[Set a predetermined answer for the edit pkgbuild menu]:answer' - '--answerupgrade[Set a predetermined answer for the upgrade menu]:answer' - '--noanswerclean[Unset the answer for the clean build menu]' - '--noansweredit[Unset the answer for the edit pkgbuild menu]' - '--noanswerupgrade[Unset the answer for the upgrade menu]' - '--cleanmenu[Give the option to clean build PKGBUILDS]' - '--diffmenu[Give the option to show diffs for build files]' - '--editmenu[Give the option to edit/view PKGBUILDS]' - '--upgrademenu[Show a detailed list of updates with the option to skip any]' - "--nocleanmenu[Don't clean build PKGBUILDS]" - "--nodiffmenu[Don't show diffs for build files]" - "--noeditmenu[Don't edit/view PKGBUILDS]" - "--noupgrademenu[Don't show the upgrade menu]" - "--askremovemake[Ask to remove makedepends after install]" - "--removemake[Remove makedepends after install]" - "--noremovemake[Don't remove makedepends after install]" + '--sortby[Sort AUR results by a specific field during search]:sortby options:(votes popularity id baseid name base submitted modified)' + '--answerclean[Set a predetermined answer for the clean build menu]:answer' + '--answeredit[Set a predetermined answer for the edit pkgbuild menu]:answer' + '--answerupgrade[Set a predetermined answer for the upgrade menu]:answer' + '--noanswerclean[Unset the answer for the clean build menu]' + '--noansweredit[Unset the answer for the edit pkgbuild menu]' + '--noanswerupgrade[Unset the answer for the upgrade menu]' + '--cleanmenu[Give the option to clean build PKGBUILDS]' + '--diffmenu[Give the option to show diffs for build files]' + '--editmenu[Give the option to edit/view PKGBUILDS]' + '--upgrademenu[Show a detailed list of updates with the option to skip any]' + "--nocleanmenu[Don't clean build PKGBUILDS]" + "--nodiffmenu[Don't show diffs for build files]" + "--noeditmenu[Don't edit/view PKGBUILDS]" + "--noupgrademenu[Don't show the upgrade menu]" + "--askremovemake[Ask to remove makedepends after install]" + "--removemake[Remove makedepends after install]" + "--noremovemake[Don't remove makedepends after install]" - '--bottomup[Show AUR packages first]' - '--topdown[Show repository packages first]' - '--devel[Check -git/-svn/-hg development version]' - '--nodevel[Disable development version checking]' - '--afterclean[Clean package sources after successful build]' - '--noafterclean[Disable package sources cleaning after successful build]' - '--timeupdate[Check packages modification date and version]' - '--notimeupdate[Check only package version change]' - '--redownload[Always download pkgbuilds of targets]' - '--redownloadall[Always download pkgbuilds of all AUR packages]' - '--noredownload[Skip pkgbuild download if in cache and up to date]' - '--rebuild[Always build target packages]' - '--rebuildall[Always build all AUR packages]' - '--provides[Look for matching provders when searching for packages]' - '--noprovides[Just look for packages by pkgname]' - '--pgpfetch[Prompt to import PGP keys from PKGBUILDs]' - "--nopgpfetch[Don't prompt to import PGP keys]" - "--useask[Automatically resolve conflicts using pacman's ask flag]" - '--nouseask[Confirm conflicts manually during the install]' - '--combinedupgrade[Refresh then perform the repo and AUR upgrade together]' - '--nocombinedupgrade[Perform the repo upgrade and AUR upgrade separately]' - '--rebuildtree[Always build all AUR packages even if installed]' - '--norebuild[Skip package build if in cache and up to date]' - '--mflags[Pass arguments to makepkg]:mflags' - '--gpgflags[Pass arguments to gpg]:gpgflags' - '--sudoloop[Loop sudo calls in the background to avoid timeout]' - '--nosudoloop[Do not loop sudo calls in the backgrount]' + '--bottomup[Show AUR packages first]' + '--topdown[Show repository packages first]' + '--devel[Check -git/-svn/-hg development version]' + '--nodevel[Disable development version checking]' + '--afterclean[Clean package sources after successful build]' + '--noafterclean[Disable package sources cleaning after successful build]' + '--timeupdate[Check packages modification date and version]' + '--notimeupdate[Check only package version change]' + '--redownload[Always download pkgbuilds of targets]' + '--redownloadall[Always download pkgbuilds of all AUR packages]' + '--noredownload[Skip pkgbuild download if in cache and up to date]' + '--rebuild[Always build target packages]' + '--rebuildall[Always build all AUR packages]' + '--provides[Look for matching provders when searching for packages]' + '--noprovides[Just look for packages by pkgname]' + '--pgpfetch[Prompt to import PGP keys from PKGBUILDs]' + "--nopgpfetch[Don't prompt to import PGP keys]" + "--useask[Automatically resolve conflicts using pacman's ask flag]" + '--nouseask[Confirm conflicts manually during the install]' + '--combinedupgrade[Refresh then perform the repo and AUR upgrade together]' + '--nocombinedupgrade[Perform the repo upgrade and AUR upgrade separately]' + '--rebuildtree[Always build all AUR packages even if installed]' + '--norebuild[Skip package build if in cache and up to date]' + '--mflags[Pass arguments to makepkg]:mflags' + '--gpgflags[Pass arguments to gpg]:gpgflags' + '--sudoloop[Loop sudo calls in the background to avoid timeout]' + '--nosudoloop[Do not loop sudo calls in the backgrount]' ) # options for passing to _arguments: options for --upgrade commands _pacman_opts_pkgfile=( - '*-d[Skip dependency checks]' - '*--nodeps[Skip dependency checks]' - '*--assume-installed[Add virtual package to satisfy dependencies]' - '--dbonly[Only remove database entry, do not remove files]' - '--force[Overwrite conflicting files]' - '--needed[Do not reinstall up to date packages]' - '--asdeps[mark packages as non-explicitly installed]' - '--asexplicit[mark packages as explicitly installed]' - {-p,--print}'[Only print the targets instead of performing the operation]' - '*--ignore[Ignore a package upgrade]:package: _pacman_completions_all_packages' - '*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups' - '--print-format[Specify how the targets should be printed]' - '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' + '*-d[Skip dependency checks]' + '*--nodeps[Skip dependency checks]' + '*--assume-installed[Add virtual package to satisfy dependencies]' + '--dbonly[Only remove database entry, do not remove files]' + '--force[Overwrite conflicting files]' + '--needed[Do not reinstall up to date packages]' + '--asdeps[mark packages as non-explicitly installed]' + '--asexplicit[mark packages as explicitly installed]' + {-p,--print}'[Only print the targets instead of performing the operation]' + '*--ignore[Ignore a package upgrade]:package: _pacman_completions_all_packages' + '*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups' + '--print-format[Specify how the targets should be printed]' + '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' ) # options for passing to _arguments: subactions for --query command _pacman_opts_query_actions=( - '(-Q --query)'{-Q,--query} - {-g,--groups}'[View all members of a package group]:*:package groups:->query_group' - {-o,--owns}'[Query the package that owns a file]:file:_files' - {-p,--file}'[Package file to query]:*:package file:->query_file' - {-s,--search}'[Search package names and descriptions]:*:search text:->query_search' + '(-Q --query)'{-Q,--query} + {-g,--groups}'[View all members of a package group]:*:package groups:->query_group' + {-o,--owns}'[Query the package that owns a file]:file:_files' + {-p,--file}'[Package file to query]:*:package file:->query_file' + {-s,--search}'[Search package names and descriptions]:*:search text:->query_search' ) # options for passing to _arguments: options for --query and subcommands _pacman_opts_query_modifiers=( - {-c,--changelog}'[List package changelog]' - {-d,--deps}'[List packages installed as dependencies]' - {-e,--explicit}'[List packages explicitly installed]' - {\*-i,\*--info}'[View package information]' - {\*-k,\*--check}'[Check package files]' - {-l,--list}'[List package contents]' - {-m,--foreign}'[List installed packages not found in sync db(s)]' - {-n,--native}'[List installed packages found in sync db(s)]' - {-q,--quiet}'[Show less information for query and search]' - {-t,--unrequired}'[List packages not required by any package]' - {-u,--upgrades}'[List packages that can be upgraded]' + {-c,--changelog}'[List package changelog]' + {-d,--deps}'[List packages installed as dependencies]' + {-e,--explicit}'[List packages explicitly installed]' + {\*-i,\*--info}'[View package information]' + {\*-k,\*--check}'[Check package files]' + {-l,--list}'[List package contents]' + {-m,--foreign}'[List installed packages not found in sync db(s)]' + {-n,--native}'[List installed packages found in sync db(s)]' + {-q,--quiet}'[Show less information for query and search]' + {-t,--unrequired}'[List packages not required by any package]' + {-u,--upgrades}'[List packages that can be upgraded]' ) # -Y _pacman_opts_yay_modifiers=( - {-c,--clean}'[Remove unneeded dependencies]' - '--gendb[Generates development package DB used for updating]' + {-c,--clean}'[Remove unneeded dependencies]' + '--gendb[Generates development package DB used for updating]' ) # -P _pacman_opts_print_modifiers=( - {-c,--complete}'[Used for completions]' - {-d,--defaultconfig}'[Print default yay configuration]' - {-g,--config}'[Print current yay configuration]' - {-n,--numberupgrades}'[Print number of updates]' - {-s,--stats}'[Display system package statistics]' - {-u,--upgrades}'[Print update list]' - {-w,--news}'[Print arch news]' + {-c,--complete}'[Used for completions]' + {-d,--defaultconfig}'[Print default yay configuration]' + {-g,--config}'[Print current yay configuration]' + {-n,--numberupgrades}'[Print number of updates]' + {-s,--stats}'[Display system package statistics]' + {-u,--upgrades}'[Print update list]' + {-w,--news}'[Print arch news]' ) # options for passing to _arguments: options for --remove command _pacman_opts_remove=( - {-c,--cascade}'[Remove all dependent packages]' - {-d,--nodeps}'[Skip dependency checks]' - '*--assume-installed[Add virtual package to satisfy dependencies]' - {-n,--nosave}'[Remove protected configuration files]' - {-p,--print}'[Only print the targets instead of performing the operation]' - {\*-s,\*--recursive}'[Remove dependencies not required by other packages]' - {-u,--unneeded}'[Remove unneeded packages]' - '--dbonly[Only remove database entry, do not remove files]' - '--print-format[Specify how the targets should be printed]' - '*:installed package:_pacman_completions_installed_packages' + {-c,--cascade}'[Remove all dependent packages]' + {-d,--nodeps}'[Skip dependency checks]' + '*--assume-installed[Add virtual package to satisfy dependencies]' + {-n,--nosave}'[Remove protected configuration files]' + {-p,--print}'[Only print the targets instead of performing the operation]' + {\*-s,\*--recursive}'[Remove dependencies not required by other packages]' + {-u,--unneeded}'[Remove unneeded packages]' + '--dbonly[Only remove database entry, do not remove files]' + '--print-format[Specify how the targets should be printed]' + '*:installed package:_pacman_completions_installed_packages' ) _pacman_opts_database=( - '--asdeps[mark packages as non-explicitly installed]' - '--asexplicit[mark packages as explicitly installed]' - '*:installed package:_pacman_completions_installed_packages' + '--asdeps[mark packages as non-explicitly installed]' + '--asexplicit[mark packages as explicitly installed]' + '*:installed package:_pacman_completions_installed_packages' ) _pacman_opts_files=( - {-l,--list}'[List the files owned by the queried package]:package:_pacman_completions_all_packages' - {-o,--owns}'[Query the package that owns]:files:_files' - {-s,--search}'[Search package file names for matching strings]:files:_files' - {-x,--regex}'[Enable searching using regular expressions]:regex:' - {-y,--refresh}'[Download fresh files databases from the server]' - '--machinereadable[Produce machine-readable output]' - {-q,--quiet}'[Show less information for query and search]' + {-l,--list}'[List the files owned by the queried package]:package:_pacman_completions_all_packages' + {-o,--owns}'[Query the package that owns]:files:_files' + {-s,--search}'[Search package file names for matching strings]:files:_files' + {-x,--regex}'[Enable searching using regular expressions]:regex:' + {-y,--refresh}'[Download fresh files databases from the server]' + '--machinereadable[Produce machine-readable output]' + {-q,--quiet}'[Show less information for query and search]' ) # options for passing to _arguments: options for --sync command _pacman_opts_sync_actions=( - '(-S --sync)'{-S,--sync} - {\*-c,\*--clean}'[Remove old packages from cache]:\*:clean:->sync_clean' - {-g,--groups}'[View all members of a package group]:*:package groups:->sync_group' - {-s,--search}'[Search package names and descriptions]:*:search text:->sync_search' - '--dbonly[Only remove database entry, do not remove files]' - '--needed[Do not reinstall up to date packages]' - '--recursive[Reinstall all dependencies of target packages]' + '(-S --sync)'{-S,--sync} + {\*-c,\*--clean}'[Remove old packages from cache]:\*:clean:->sync_clean' + {-g,--groups}'[View all members of a package group]:*:package groups:->sync_group' + {-s,--search}'[Search package names and descriptions]:*:search text:->sync_search' + '--dbonly[Only remove database entry, do not remove files]' + '--needed[Do not reinstall up to date packages]' + '--recursive[Reinstall all dependencies of target packages]' ) # options for passing to _arguments: options for --sync command _pacman_opts_sync_modifiers=( - {\*-d,\*--nodeps}'[Skip dependency checks]' - '*--assume-installed[Add virtual package to satisfy dependencies]' - {\*-i,\*--info}'[View package information]' - {-l,--list}'[List all packages in a repository]' - {-p,--print}'[Print download URIs for each package to be installed]' - {-q,--quiet}'[Show less information for query and search]' - {\*-u,\*--sysupgrade}'[Upgrade all out-of-date packages]' - {-w,--downloadonly}'[Download packages only]' - {\*-y,\*--refresh}'[Download fresh package databases]' - '*--ignore[Ignore a package upgrade]:package: _pacman_completions_all_packages' - '*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups' - '--asdeps[Install packages as non-explicitly installed]' - '--asexplicit[Install packages as explicitly installed]' - '--force[Overwrite conflicting files]' - '--print-format[Specify how the targets should be printed]' + {\*-d,\*--nodeps}'[Skip dependency checks]' + '*--assume-installed[Add virtual package to satisfy dependencies]' + {\*-i,\*--info}'[View package information]' + {-l,--list}'[List all packages in a repository]' + {-p,--print}'[Print download URIs for each package to be installed]' + {-q,--quiet}'[Show less information for query and search]' + {\*-u,\*--sysupgrade}'[Upgrade all out-of-date packages]' + {-w,--downloadonly}'[Download packages only]' + {\*-y,\*--refresh}'[Download fresh package databases]' + '*--ignore[Ignore a package upgrade]:package: _pacman_completions_all_packages' + '*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups' + '--asdeps[Install packages as non-explicitly installed]' + '--asexplicit[Install packages as explicitly installed]' + '--force[Overwrite conflicting files]' + '--print-format[Specify how the targets should be printed]' ) # handles --help subcommand _pacman_action_help() { - _arguments -s : \ - "$_pacman_opts_commands[@]" + _arguments -s : \ + "$_pacman_opts_commands[@]" } # handles cases where no subcommand has yet been given _pacman_action_none() { - _arguments -s : \ - "$_pacman_opts_commands[@]" + _arguments -s : \ + "$_pacman_opts_commands[@]" } # handles --query subcommand _pacman_action_query() { - local context state line - typeset -A opt_args + local context state line + typeset -A opt_args - case $state in - query_file) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' - ;; - query_group) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:groups:_pacman_completions_installed_groups' - ;; - query_owner) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:file:_files' - ;; - query_search) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:search text: ' - ;; - *) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_actions[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package:_pacman_completions_installed_packages' - ;; - esac + case $state in + query_file) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' + ;; + query_group) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:groups:_pacman_completions_installed_groups' + ;; + query_owner) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:file:_files' + ;; + query_search) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_actions[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:package:_pacman_completions_installed_packages' + ;; + esac } # handles --remove subcommand _pacman_action_remove() { - _arguments -s : \ - '(--remove -R)'{-R,--remove} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_remove[@]" + _arguments -s : \ + '(--remove -R)'{-R,--remove} \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_remove[@]" } # handles --database subcommand _pacman_action_database() { - _arguments -s : \ - '(--database -D)'{-D,--database} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_database[@]" + _arguments -s : \ + '(--database -D)'{-D,--database} \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_database[@]" } # handles --files subcommand _pacman_action_files() { - _arguments -s : \ - '(--files -F)'{-F,--files} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_files[@]" + _arguments -s : \ + '(--files -F)'{-F,--files} \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_files[@]" } _pacman_action_deptest () { - _arguments -s : \ - '(--deptest)-T' \ - "$_pacman_opts_common[@]" \ - ":packages:_pacman_all_packages" + _arguments -s : \ + '(--deptest)-T' \ + "$_pacman_opts_common[@]" \ + ":packages:_pacman_all_packages" } # handles --sync subcommand _pacman_action_sync() { - local context state line - typeset -A opt_args - if (( $+words[(r)--clean] )); then - state=sync_clean - elif (( $+words[(r)--groups] )); then - state=sync_group - elif (( $+words[(r)--search] )); then - state=sync_search - fi + local context state line + typeset -A opt_args + if (( $+words[(r)--clean] )); then + state=sync_clean + elif (( $+words[(r)--groups] )); then + state=sync_group + elif (( $+words[(r)--search] )); then + state=sync_search + fi - case $state in - sync_clean) - _arguments -s : \ - {\*-c,\*--clean}'[Remove old packages from cache]' \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" - ;; - sync_group) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '(-g --group)'{-g,--groups} \ - '*:package group:_pacman_completions_all_groups' - ;; - sync_search) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:search text: ' - ;; - *) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_actions[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:package:_pacman_completions_all_packages' - ;; - esac + case $state in + sync_clean) + _arguments -s : \ + {\*-c,\*--clean}'[Remove old packages from cache]' \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_modifiers[@]" + ;; + sync_group) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_modifiers[@]" \ + '(-g --group)'{-g,--groups} \ + '*:package group:_pacman_completions_all_groups' + ;; + sync_search) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_actions[@]" \ + "$_pacman_opts_sync_modifiers[@]" \ + '*:package:_pacman_completions_all_packages' + ;; + esac } # handles --upgrade subcommand _pacman_action_upgrade() { - _arguments -s : \ - '(-U --upgrade)'{-U,--upgrade} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_pkgfile[@]" + _arguments -s : \ + '(-U --upgrade)'{-U,--upgrade} \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_pkgfile[@]" } # handles --version subcommand _pacman_action_version() { - # no further arguments - return 0 + # no further arguments + return 0 } # provides completions for package groups _pacman_completions_all_groups() { - local -a cmd groups - _pacman_get_command - groups=( $(_call_program groups $cmd[@] -Sg) ) - typeset -U groups + local -a cmd groups + _pacman_get_command + groups=( $(_call_program groups $cmd[@] -Sg) ) + typeset -U groups - if [[ ${words[CURRENT-1]} == '--ignoregroup' ]]; then - _sequence compadd -S ',' "$@" -a groups - else - compadd "$@" -a groups - fi + if [[ ${words[CURRENT-1]} == '--ignoregroup' ]]; then + _sequence compadd -S ',' "$@" -a groups + else + compadd "$@" -a groups + fi } # provides completions for packages available from repositories # these can be specified as either 'package' or 'repository/package' _pacman_completions_all_packages() { - local -a seq sep cmd packages repositories packages_long + local -a seq sep cmd packages repositories packages_long - if [[ ${words[CURRENT-1]} == '--ignore' ]]; then - seq='_sequence' - sep=(-S ',') - else - seq= - sep=() - fi + if [[ ${words[CURRENT-1]} == '--ignore' ]]; then + seq='_sequence' + sep=(-S ',') + else + seq= + sep=() + fi - if compset -P1 '*/*'; then - packages=( $(_call_program packages yay -Pc ${words[CURRENT]%/*}) ) - typeset -U packages - ${seq} _wanted repo_packages expl "repository/package" compadd ${sep[@]} ${(@)packages} - else - packages=( $(_call_program packages yay -Pc ) ) - typeset -U packages - ${seq} _wanted packages expl "packages" compadd ${sep[@]} - "${(@)packages}" + if compset -P1 '*/*'; then + packages=( $(_call_program packages yay -Pc ${words[CURRENT]%/*}) ) + typeset -U packages + ${seq} _wanted repo_packages expl "repository/package" compadd ${sep[@]} ${(@)packages} + else + packages=( $(_call_program packages yay -Pc ) ) + typeset -U packages + ${seq} _wanted packages expl "packages" compadd ${sep[@]} - "${(@)packages}" - repositories=(${(o)${${${(M)${(f)"$(/dev/null") - integer i - for (( i = 2; i < CURRENT - 1; i++ )); do - if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then - cmd+=( ${words[i,i+1]} ) - fi - done + # this is mostly nicked from _perforce + cmd=( "pacman" "2>/dev/null") + integer i + for (( i = 2; i < CURRENT - 1; i++ )); do + if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then + cmd+=( ${words[i,i+1]} ) + fi + done } # main dispatcher _pacman_zsh_comp() { - local -a args cmds; - local tmp - args=( ${${${(M)words:#-*}#-}:#-*} ) - for tmp in $words; do - cmds+=("${${_pacman_opts_commands[(r)*$tmp\[*]%%\[*}#*\)}") - done - case $args in #$words[2] in - h*) - if (( ${(c)#args} <= 1 && ${(w)#cmds} <= 1 )); then - _pacman_action_help - else - _message "no more arguments" - fi - ;; - *h*) - _message "no more arguments" - ;; - D*) - _pacman_action_database - ;; - F*) - _pacman_action_files - ;; - Q*g*) # ipkg groups - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:groups:_pacman_completions_installed_groups' - ;; - Q*o*) # file - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package file:_files' - ;; - Q*p*) # file *.pkg.tar* - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' - ;; - T*) - _pacman_action_deptest - ;; - Q*) - _pacman_action_query - ;; - P*) - _arguments -s : \ - "$_pacman_opts_print_modifiers[@]" - ;; - R*) - _pacman_action_remove - ;; - S*c*) # no completion - _arguments -s : \ - '(-c --clean)'{\*-c,\*--clean}'[Remove all files from the cache]' \ - "$_pacman_opts_common[@]" - ;; - S*l*) # repos - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:package repo:_pacman_completions_repositories' \ - ;; - S*g*) # pkg groups - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:package group:_pacman_completions_all_groups' - ;; - S*s*) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:search text: ' - ;; - S*) - _pacman_action_sync - ;; - T*) - _arguments -s : \ - '-T' \ - "$_pacman_opts_common[@]" \ - ":packages:_pacman_all_packages" - ;; - U*) - _pacman_action_upgrade - ;; - V*) - _pacman_action_version - ;; - Y*) - _arguments -s : \ - "$_pacman_opts_yay_modifiers[@]" - ;; - *) + local -a args cmds; + local tmp + args=( ${${${(M)words:#-*}#-}:#-*} ) + for tmp in $words; do + cmds+=("${${_pacman_opts_commands[(r)*$tmp\[*]%%\[*}#*\)}") + done + case $args in #$words[2] in + h*) + if (( ${(c)#args} <= 1 && ${(w)#cmds} <= 1 )); then + _pacman_action_help + else + _message "no more arguments" + fi + ;; + *h*) + _message "no more arguments" + ;; + D*) + _pacman_action_database + ;; + F*) + _pacman_action_files + ;; + Q*g*) # ipkg groups + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:groups:_pacman_completions_installed_groups' + ;; + Q*o*) # file + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:package file:_files' + ;; + Q*p*) # file *.pkg.tar* + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' + ;; + T*) + _pacman_action_deptest + ;; + Q*) + _pacman_action_query + ;; + P*) + _arguments -s : \ + "$_pacman_opts_print_modifiers[@]" + ;; + R*) + _pacman_action_remove + ;; + S*c*) # no completion + _arguments -s : \ + '(-c --clean)'{\*-c,\*--clean}'[Remove all files from the cache]' \ + "$_pacman_opts_common[@]" + ;; + S*l*) # repos + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_modifiers[@]" \ + '*:package repo:_pacman_completions_repositories' \ + ;; + S*g*) # pkg groups + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_modifiers[@]" \ + '*:package group:_pacman_completions_all_groups' + ;; + S*s*) + _arguments -s : \ + "$_pacman_opts_common[@]" \ + "$_pacman_opts_sync_modifiers[@]" \ + '*:search text: ' + ;; + S*) + _pacman_action_sync + ;; + T*) + _arguments -s : \ + '-T' \ + "$_pacman_opts_common[@]" \ + ":packages:_pacman_all_packages" + ;; + U*) + _pacman_action_upgrade + ;; + V*) + _pacman_action_version + ;; + Y*) + _arguments -s : \ + "$_pacman_opts_yay_modifiers[@]" + ;; + *) - case ${(M)words:#--*} in - *--help*) - if (( ${(w)#cmds} == 1 )); then - _pacman_action_help - else - return 0; - fi - ;; - *--sync*) - _pacman_action_sync - ;; - *--query*) - _pacman_action_query - ;; - *--remove*) - _pacman_action_remove - ;; - *--deptest*) - _pacman_action_deptest - ;; - *--database*) - _pacman_action_database - ;; - *--files*) - _pacman_action_files - ;; - *--version*) - _pacman_action_version - ;; - *--upgrade*) - _pacman_action_upgrade - ;; - *) - _pacman_action_none - ;; - esac - ;; - esac + case ${(M)words:#--*} in + *--help*) + if (( ${(w)#cmds} == 1 )); then + _pacman_action_help + else + return 0; + fi + ;; + *--sync*) + _pacman_action_sync + ;; + *--query*) + _pacman_action_query + ;; + *--remove*) + _pacman_action_remove + ;; + *--deptest*) + _pacman_action_deptest + ;; + *--database*) + _pacman_action_database + ;; + *--files*) + _pacman_action_files + ;; + *--version*) + _pacman_action_version + ;; + *--upgrade*) + _pacman_action_upgrade + ;; + *) + _pacman_action_none + ;; + esac + ;; + esac } _pacman_comp() { - case "$service" in - yay) - _pacman_zsh_comp "$@" - ;; - *) - _message "Error" - ;; - esac + case "$service" in + yay) + _pacman_zsh_comp "$@" + ;; + *) + _message "Error" + ;; + esac } _pacman_comp "$@"