diff options
author | e5ten <e5ten.arch@gmail.com> | 2019-04-16 09:19:39 -0400 |
---|---|---|
committer | e5ten <e5ten.arch@gmail.com> | 2019-05-03 13:59:35 -0400 |
commit | 065c2d00e822fe43a781b2da03d236eb16012823 (patch) | |
tree | 480a9bce47d6c7be28c78c3e18db28ef70cf154a /completions | |
parent | 40ff6f73c1a5f18f45bb4c1b329495d095b25efe (diff) |
update Makefile to set version in pacaur script based on git
Diffstat (limited to 'completions')
-rw-r--r-- | completions/bash.completion | 43 | ||||
-rw-r--r-- | completions/zsh.completion | 609 |
2 files changed, 652 insertions, 0 deletions
diff --git a/completions/bash.completion b/completions/bash.completion new file mode 100644 index 0000000..59229f8 --- /dev/null +++ b/completions/bash.completion @@ -0,0 +1,43 @@ +#!/bin/bash + +# +# /usr/share/bash-completion/completions/pacaur +# + +_aur_pkg() { + # at least 2 characters required due to AUR limitation + COMPREPLY+=($(compgen -W "$(auracle search -q -- ^$cur 2>/dev/null)" -- $cur)) +} + +_pacaur() { + # define variables + local cur op o + COMPREPLY=() + cur=$(_get_cword) + if ((COMP_CWORD == 1)); then + _pacman &> /dev/null + _arch_compgen "${COMPREPLY[@]}" "-v --version -h --help" + return 0 + fi + for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'T deptest' 'U upgrade' 'V version'; do + _arch_incomp "$o" && break + done + (($?)) && op="" || op="${o% *}" + _pacman &> /dev/null + if [[ "$cur" == -* ]]; then + case "$op" in + S) _arch_compgen "${COMPREPLY[@]}" "-a --aur -r --repo -e --edit --devel --foreign --noedit --rebuild --silent";; + esac + else + case "$op" in + S) _pacman_pkg Slq; _aur_pkg;; # No fallback var support. + info|buildonly|sync) _aur_pkg;; + upgrade|check) _pacman_pkg Qqm;; + esac + fi +} + +_completion_loader pacman +complete -o default -F _pacaur pacaur + +# vim:set ts=4 sw=4 et: diff --git a/completions/zsh.completion b/completions/zsh.completion new file mode 100644 index 0000000..697f704 --- /dev/null +++ b/completions/zsh.completion @@ -0,0 +1,609 @@ +#compdef pacaur + +# +# /usr/share/zsh/site-functions/_pacaur +# + +typeset -A opt_args +setopt extendedglob + +# we use zstat to check ctime quickly because pacman doesn't always set +# mtime and `test 'file' -nt 'file'` uses mtime +if zmodload -F zsh/stat b:zstat 2>/dev/null; then + # check all databases against the cache file + function _pacaur_all_packages_caching_policy() { + [[ ! -f "$1" ]] && return 0 + for file in /var/lib/pacman/sync/*.db; do + if [[ "$(zstat +ctime "$file")" -gt "$(zstat +ctime "$1")" ]]; then + return 0 + fi + done + return 1 + } + + # check the database being completed against it's cache file + function _pacaur_repo_packages_caching_policy() { + [[ ! -f "$1" ]] && return 0 + local file="/var/lib/pacman/sync/${words[CURRENT]%/*}.db" + if [[ "$(zstat +ctime "$file")" -gt "$(zstat +ctime "$1")" ]]; then + return 0 + fi + return 1 + } +else + # return 0 is implicit + function _pacaur_all_packages_caching_policy() {} + function _pacaur_repo_packages_caching_policy() {} +fi + + +# options for passing to _arguments: main pacaur commands +_pacaur_opts_commands=( + ":pacaur_commands:(( + {-D,--database}\:'Modify database' + {-Q,--query}\:'Query the package database' + {-R,--remove}\:'Remove a package from the system' + {-S,--sync}\:'Synchronize packages' + {-T,--deptest}\:'Check if dependencies are installed' + {-U,--upgrade}\:'Upgrade a package' + {-h,--help}\:'Display usage' + '-V\:Display pacman version' + {-v,--version}\:'Display pacaur version' + ))" +) + +_pacaur_opts_extended=( + {-a,--aur}'[Only search, build, install or clean target(s) from the AUR]' + {-e,--edit}'[Edit target(s) PKGBUILD and view install script]' + {-r,--repo}'[Only search, build, install or clean target(s) from the repositories]' + '--foreign[Consider already installed foreign dependencies]' + '--noedit[Do not prompt to edit files]' + '--rebuild[Always rebuild package(s)]' + '--silent[Silence output]' +) + +# options for passing to _arguments: options common to all commands +_pacaur_opts_common=( + {-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]' + '--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' + '--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]' + '--print[Only print the targets instead of performing the operation]' +) + +# options for passing to _arguments: options for --upgrade commands +_pacaur_opts_pkgfile=( + '*-d[Skip dependency checks]' + '*--nodeps[Skip dependency checks]' + '--dbonly[Only remove database entry, do not remove files]' + '--overwrite[Overwrite conflicting files]:overwrite:_files' + '--needed[Do not reinstall up to date packages]' + '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' +) + +# options for passing to _arguments: subactions for --query command +_pacaur_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' +) + +# options for passing to _arguments: options for --query and subcommands +_pacaur_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)]' + {-t,--unrequired}'[List packages not required by any package]' + {-u,--upgrades}'[List packages that can be upgraded]' + {-q,--quiet}'[Show less information]' +) + +# options for passing to _arguments: options for --remove command +_pacaur_opts_remove=( + {-c,--cascade}'[Remove all dependent packages]' + {*-d,*--nodeps}'[Skip dependency checks]' + {-n,--nosave}'[Remove protected configuration files]' + {\*-s,\*--recursive}'[Remove dependencies not required by other packages]' + '--dbonly[Only remove database entry, do not remove files]' + '*:installed package:_pacaur_completions_installed_packages' +) + +_pacaur_opts_database=( + '--asdeps[mark packages as non-explicitly installed]' + '--asexplicit[mark packages as explicitly installed]' + '*:installed package:_pacaur_completions_installed_packages' +) + +# options for passing to _arguments: options for --sync command +_pacaur_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]' +) + +# options for passing to _arguments: options for --sync command +_pacaur_opts_sync_modifiers=( + {\*-d,\*--nodeps}'[Skip dependency checks]' + {\*-i,\*--info}'[View package information]' + {-l,--list}'[List all packages in a repository]' + {-p,--print}'[Print download URIs for each package to be installed]' + {\*-u,\*--sysupgrade}'[Upgrade all out-of-date packages]' + {-w,--downloadonly}'[Download packages only]' + {\*-y,\*--refresh}'[Download fresh package databases]' + {-q,--quiet}'[Show less information]' + '*--ignore[Ignore a package upgrade]:package: _pacaur_all_packages' + '*--ignoregroup[Ignore a group upgrade]:package group:_pacaur_completions_all_groups' + '--asdeps[Install packages as non-explicitly installed]' + '--asexplicit[Install packages as explicitly installed]' + '--overwrite[Overwrite conflicting files]:overwrite:_files' +) + +# handles check subcommand +_pacaur_action_check() { + _arguments -s : \ + "*:check:(( --devel\:'Consider AUR development packages upgrade' ))" +} + +# handles info subcommand +_pacaur_action_info() { + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_extended[@]" \ + "$_pacaur_opts_sync_actions[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:info:_pacaur_completions_aur_packages' +} + +# handles clean subcommand +_pacaur_action_clean() { + if [[ $AURDEST ]] then; + CLONEDIR=$AURDEST + elif [[ $XDG_CACHE_HOME && -a $XDG_CACHE_HOME/pacaur ]]; then + CLONEDIR=$XDG_CACHE_HOME/pacaur + else + CLONEDIR=$HOME/.cache/pacaur + fi + _arguments -s : \ + "*:clean:($(ls $CLONEDIR))" \ + "$_pacaur_opts_common[@]" + } + +# handles --help subcommand +_pacaur_action_help() { + _arguments -s : \ + "$_pacaur_opts_commands[@]" +} + +# handles cases where no subcommand has yet been given +_pacaur_action_none() { + _arguments -s : \ + "$_pacaur_opts_commands[@]" +} + +# handles --query subcommand +_pacaur_action_query() { + local context state line + typeset -A opt_args + + case $state in + query_file) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' + ;; + query_group) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:groups:_pacaur_completions_installed_groups' + ;; + query_owner) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:file:_files' + ;; + query_search) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_actions[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:package:_pacaur_completions_installed_packages' + ;; + esac +} + +# handles --remove subcommand +_pacaur_action_remove() { + _arguments -s : \ + '(--remove -R)'{-R,--remove} \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_remove[@]" +} + +# handles --database subcommand +_pacaur_action_database() { + _arguments -s : \ + '(--database -D)'{-D,--database} \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_database[@]" +} + +_pacaur_action_deptest () { + _arguments -s : \ + '(--deptest)-T' \ + "$_pacaur_opts_common[@]" \ + ":packages:_pacaur_all_packages" +} + +# handles --sync subcommand +_pacaur_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] || $+words[(r)search] )); then + state=sync_search + fi + + case $state in + sync_clean) + _arguments -s : \ + {\*-c,\*--clean}'[Remove old packages from cache]' \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_sync_modifiers[@]" + ;; + sync_group) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '(-g --group)'{-g,--groups} \ + '*:package group:_pacaur_completions_all_groups' + ;; + sync_search) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_extended[@]" \ + "$_pacaur_opts_sync_actions[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:packages:'$completion_repo + ;; + esac +} + +# handles --upgrade subcommand +_pacaur_action_upgrade() { + _arguments -s : \ + '(-U --upgrade)'{-U,--upgrade} \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_pkgfile[@]" +} + +# handles --version subcommand +_pacaur_action_version() { + # no further arguments + return 0 +} + +# provides completions for package groups +_pacaur_completions_all_groups() { + local -a cmd groups + _pacaur_get_command + groups=( $(_call_program groups $cmd[@] -Sg) ) + typeset -U groups + compadd "$@" -a groups +} + +# provides completions for packages available from repositories +# these can be specified as either 'package' or 'repository/package' +_pacaur_completions_all_packages() { + local curcontext="${curcontext}" cache_name repo + local -a cmd packages repositories packages_long + + _pacaur_get_command + + if compset -P1 '*/*'; then + curcontext="${curcontext}_repo_packages" + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" \ + cache-policy _pacaur_repo_packages_caching_policy + + repo="${words[CURRENT]%/*}" + cache_name="pacman_repo_packages_$repo" + if _cache_invalid "$cache_name" || ! _retrieve_cache "$cache_name"; then + packages=( $(_call_program packages $cmd[@] -Sql "$repo") ) + typeset -U packages + _store_cache "$cache_name" packages + fi + _wanted repo_packages expl "repository/package" compadd ${(@)packages} + else + curcontext="${curcontext}_all_packages" + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" \ + cache-policy _pacaur_all_packages_caching_policy + + cache_name='pacman_packages' + if _cache_invalid "$cache_name" || ! _retrieve_cache "$cache_name"; then + packages=( $(_call_program packages $cmd[@] -Sql) ) + typeset -U packages + _store_cache "$cache_name" packages + fi + _wanted packages expl "packages" compadd - "${(@)packages}" + + repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) + typeset -U repositories + _wanted repo_packages expl "repository/package" compadd -S "/" $repositories + fi +} + +_pacaur_completions_aur_packages() { + zstyle -T ":completion:${curcontext}:" remote-access || return 1 + local -a aur_packages + aur_packages=($(_call_program packages auracle search -q --color=never $words[CURRENT] 2>/dev/null)) + _wanted aur_packages expl "aur packages" compadd - "${(@)aur_packages}" +} + +# provides completions for package groups +_pacaur_completions_installed_groups() { + local -a cmd groups + _pacaur_get_command + groups=(${(o)${(f)"$(_call_program groups $cmd[@] -Qg)"}% *}) + typeset -U groups + compadd "$@" -a groups +} + +# provides completions for installed packages +_pacaur_completions_installed_packages() { + local -a packages + packages_long=(/var/lib/pacman/local/*(/)) + packages=( ${${packages_long#/var/lib/pacman/local/}%-*-*} ) + compadd "$@" -a packages +} + +_pacaur_all_packages() { + _alternative : \ + 'localpkgs:local packages:_pacaur_completions_installed_packages' \ + 'aurpkgs:aur packages:_pacaur_completions_aur_packages' \ + 'repopkgs:repository packages:_pacaur_completions_all_packages' +} + +_pacaur_remote_packages() { + _alternative : \ + 'aurpkgs:aur packages:_pacaur_completions_aur_packages' \ + 'repopkgs:repository packages:_pacaur_completions_all_packages' +} + +# provides completions for repository names +_pacaur_completions_repositories() { + local -a cmd repositories + repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) + # Uniq the array + typeset -U repositories + compadd "$@" -a repositories +} + +# builds command for invoking pacman in a _call_program command - extracts +# relevant options already specified (config file, etc) +# $cmd must be declared by calling function +_pacaur_get_command() { + # 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 +local -a args cmds; +local tmp +args=( ${${${(M)words:#-*}#-}:#-*} ) +for tmp in $words; do + cmds+=("${${_pacaur_opts_commands[(r)*$tmp\[*]%%\[*}#*\)}") +done + +# handle repository filter +if [[ $words[2] != -* ]]; then + isaur=1 +else + isaur=0 +fi +if (( $+words[(r)--aur] || $+words[(r)-S*a*] || $isaur )); then + completion_repo='_pacaur_completions_aur_packages' +elif (( $+words[(r)--repo] || $+words[(r)-S*r*] )); then + completion_repo='_pacaur_completions_all_packages' +else + completion_repo='_pacaur_remote_packages' +fi + +case $args in + h*) + if (( ${(c)#args} <= 1 && ${(w)#cmds} <= 1 )); then + _pacaur_action_help + else + _message "no more arguments" + fi + ;; + *h*) + _message "no more arguments" + ;; + D*) + _pacaur_action_database + ;; + Q*g*) # ipkg groups + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:groups:_pacaur_completions_installed_groups' + ;; + Q*o*) # file + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:package file:_files' + ;; + Q*p*) # file *.pkg.tar* + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' + ;; + T*) + _pacaur_action_deptest + ;; + Q*) + _pacaur_action_query + ;; + R*) + _pacaur_action_remove + ;; + S*c*) # no completion + _arguments -s : \ + '(-c --clean)'{\*-c,\*--clean}'[Remove all files from the cache]' \ + "$_pacaur_opts_common[@]" + ;; + S*l*) # repos + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:package repo:_pacaur_completions_repositories' \ + ;; + S*g*) # pkg groups + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:package group:_pacaur_completions_all_groups' + ;; + S*s*) + _arguments -s : \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:search text: ' + ;; + S*u*) + _arguments -s : \ + '--devel[Consider AUR development packages upgrade]' \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_extended[@]" \ + "$_pacaur_opts_sync_actions[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:packages:'$completion_repo + ;; + S*) + _pacaur_action_sync + ;; + T*) + _arguments -s : \ + '-T' \ + "$_pacaur_opts_common[@]" \ + ":packages:_pacaur_all_packages" + ;; + U*) + _pacaur_action_upgrade + ;; + V*) + _pacaur_action_version + ;; + *) + if [[ ${words[2]} != -* && ${CURRENT} -gt 2 ]] then + case ${words[2]} in + sync) + _pacaur_action_sync + ;; + upgrade) + _arguments -s : \ + '--devel[Consider AUR development packages upgrade]' \ + '--needed[Do not reinstall up to date packages]' \ + "$_pacaur_opts_common[@]" \ + "$_pacaur_opts_extended[@]" \ + "$_pacaur_opts_sync_modifiers[@]" \ + '*:packages:'$completion_repo + ;; + check) + _pacaur_action_check + ;; + search) + _pacaur_action_sync + ;; + info) + _pacaur_action_info + ;; + buildonly) + _pacaur_action_sync + ;; + clean) + _pacaur_action_clean + ;; + cleanall) + _arguments -s : \ + "$_pacaur_opts_common[@]" + ;; + esac + else + case ${(M)words:#--*} in + *--help*) + if (( ${(w)#cmds} == 1 )); then + _pacaur_action_help + else + return 0; + fi + ;; + *--version*) + _pacaur_action_version + ;; + *--query*) + _pacaur_action_query + ;; + *--remove*) + _pacaur_action_remove + ;; + *--deptest*) + _pacaur_action_deptest + ;; + *--database*) + _pacaur_action_database + ;; + *) + _pacaur_action_none + ;; + esac + fi +;; +esac + +# vim:set ts=4 sw=4 et: |