301 lines
8.2 KiB
Plaintext
301 lines
8.2 KiB
Plaintext
|
#compdef prt-get prt-cache
|
||
|
|
||
|
_commands=(
|
||
|
help:'show this help'
|
||
|
version:'show the current version'
|
||
|
list:'show a list of available ports'
|
||
|
printf:'print formatted list of available ports'
|
||
|
listinst:'show a list of installed ports'
|
||
|
listorphans:'list of ports with no packages depending on them'
|
||
|
info:'show info about a port'
|
||
|
path:'show path of a port'
|
||
|
readme:'show a port'"'"'s readme file (if it exists)'
|
||
|
dup:'find duplicate ports'
|
||
|
isinst:'print whether ports are installed'
|
||
|
current:'print installed version of port'
|
||
|
diff:'list outdated packages (or check args for change)'
|
||
|
quickdiff:'same as diff but simple format'
|
||
|
depends:'show dependencies for these ports'
|
||
|
quickdep:'same as depends but simple format'
|
||
|
deptree:'show dependencies tree for <port>'
|
||
|
dependent:'show installed packages which depend on '"'"'port'"'"''
|
||
|
search:'show port names containing '"'"'expr'"'"''
|
||
|
dsearch:'show ports containing '"'"'expr'"'"' in the name or description'
|
||
|
fsearch:'show file names in footprints matching '"'"'pattern'"'"''
|
||
|
install:'install ports'
|
||
|
update:'update ports'
|
||
|
depinst:'install ports and their dependencies'
|
||
|
remove:'remove ports'
|
||
|
sysup:'update all outdated ports'
|
||
|
lock:'lock current version of packages'
|
||
|
unlock:'unlock packages'
|
||
|
listlocked:'list locked packages'
|
||
|
ls:'print a listing of the port'"'"'s directory'
|
||
|
cat:'print out '"'"'port/file'"'"''
|
||
|
edit:'edit '"'"'port/file'"'"''
|
||
|
)
|
||
|
|
||
|
# Options Information
|
||
|
_infooptions=(
|
||
|
"--depsort[Sort by dependencies]"
|
||
|
)
|
||
|
|
||
|
# Options for Differences / Check for updates
|
||
|
_diffoptions=(
|
||
|
"--all[display locked ports too]"
|
||
|
"--prefer-higher[prefer higher installed versions over lower ports]"
|
||
|
"--strict-diff[override prefer higher configuration setting]"
|
||
|
)
|
||
|
|
||
|
# Options for Dependencies
|
||
|
_depoptions=(
|
||
|
"--all[list all dependent packages, not only installed]"
|
||
|
"--recursive[print recursive listing]"
|
||
|
"--tree[print recursive tree listing]"
|
||
|
"--softdeps[consider optional dependencies too]"
|
||
|
)
|
||
|
|
||
|
# Options for Install, Update and Removal
|
||
|
_installoptions=(
|
||
|
"-f[force installation]"
|
||
|
"-fi[force installation]"
|
||
|
"-fr[force rebuild]"
|
||
|
"-uf[update footprint]"
|
||
|
"-if[ignore footprint]"
|
||
|
"-um[update md5sum]"
|
||
|
"-im[ignore md5sum]"
|
||
|
"-us[update signature]"
|
||
|
"-is[ignore signature]"
|
||
|
"--margs=[pass 'string' to pkgmk]"
|
||
|
"--aargs=[pass 'string' to pkgadd]"
|
||
|
"--rargs=[pass 'string' to pkgrm]"
|
||
|
"--group[stop if any package fails to build]"
|
||
|
"--test[test mode]"
|
||
|
"--log[write log file]"
|
||
|
"--ignore=[Don't install/update those packages]:ignored packages:_allports"
|
||
|
"--pre-install[execute pre-install script]"
|
||
|
"--post-install[execute post-install script]"
|
||
|
"--install-scripts[execute pre-install and post-install script]"
|
||
|
)
|
||
|
|
||
|
# Options for System Update
|
||
|
_sysupoptions=(
|
||
|
"--nodeps[don't sort by dependencies]"
|
||
|
"--softdeps[consider optional dependencies when sorting]"
|
||
|
"--group[stop if any package fails to build]"
|
||
|
"--test[test mode]"
|
||
|
"--log[write log file]"
|
||
|
"--prefer-higher[prefer higher installed versions over lower ones in ports tree]"
|
||
|
"--strict-diff[override prefer higher configuration setting]"
|
||
|
)
|
||
|
|
||
|
_printfoptions=(
|
||
|
'%n[name]'
|
||
|
'%p[path]'
|
||
|
'%v[version]'
|
||
|
'%r[release]'
|
||
|
'%d[description]'
|
||
|
'%e[dependencies]'
|
||
|
'%P[optional dependencies]'
|
||
|
'%u[URL]'
|
||
|
'%M[Maintainer]'
|
||
|
'%R[Readme]'
|
||
|
'%E[pre-install script]'
|
||
|
'%O[post-install script]'
|
||
|
'%l[is locked]'
|
||
|
'%i[installed]'
|
||
|
)
|
||
|
|
||
|
# Options for General Options
|
||
|
_options=(
|
||
|
"-v[Show version in listing]"
|
||
|
"-vv[Show version and decription in listing]"
|
||
|
"--path[Print path to port if appropriate (search, list, depends)]"
|
||
|
"--cache[Use a cache file]"
|
||
|
"--config=[Use alternative configuration file]:file:_files"
|
||
|
"--install-root=[Use alternative install root directory]:directory:_directories"
|
||
|
"--no-std-config[Don't parse default configuration file]"
|
||
|
"--config-prepend=[Prepend '..' to configuration]:directory:_directories"
|
||
|
"--config-append=[Append '..' to configuration]:directory:_directories"
|
||
|
"--config-set=[Set configuration data '..', overriding config file]:data"
|
||
|
)
|
||
|
|
||
|
# Port list generators
|
||
|
_allports() {
|
||
|
local -a list
|
||
|
list=(${(f)"$(prt-get list 2>/dev/null)"})
|
||
|
_describe 'ports' list
|
||
|
}
|
||
|
|
||
|
_installedports() {
|
||
|
local -a list
|
||
|
list=(${(f)"$(prt-get listinst 2>/dev/null)"})
|
||
|
_describe 'installedports' list
|
||
|
}
|
||
|
|
||
|
_notinstalledports() {
|
||
|
local -a installed_ports all_ports not_installed_ports
|
||
|
installed_ports=(${(f)"$(prt-cache listinst 2>/dev/null)"})
|
||
|
all_ports=(${(f)"$(prt-cache list 2>/dev/null)"})
|
||
|
not_installed_ports=(${all_ports:|installed_ports})
|
||
|
|
||
|
_describe 'notinstalledports' not_installed_ports
|
||
|
}
|
||
|
|
||
|
_lockedports() {
|
||
|
local -a list
|
||
|
list=(${(f)"$(prt-cache listlocked 2>/dev/null)"})
|
||
|
_describe 'lockedports' list
|
||
|
}
|
||
|
|
||
|
_unlockedports() {
|
||
|
local -a installed locked list
|
||
|
installed=("${(f)$(prt-cache listinst)}")
|
||
|
locked=("${(f)$(prt-cache listlocked)}")
|
||
|
list=("${(f)$(echo ${installed[@]} ${locked[@]} | tr ' ' '\n' | sort | uniq -u)}")
|
||
|
_describe 'unlockedports' list
|
||
|
}
|
||
|
|
||
|
_outdatedports() {
|
||
|
local -a list
|
||
|
list=(${(f)"$(prt-cache quickdiff | tr ' ' '\n' | sort)"})
|
||
|
_describe 'outdatedports' list
|
||
|
}
|
||
|
|
||
|
# TODO: print files from <port> that exist inside the directory
|
||
|
# valid file for cat and edit
|
||
|
_validfiles() {
|
||
|
local -a list
|
||
|
list=(
|
||
|
"Pkgfile"
|
||
|
".signature"
|
||
|
".footprint"
|
||
|
"README"
|
||
|
"README.md"
|
||
|
)
|
||
|
_describe 'validfiles' list
|
||
|
}
|
||
|
|
||
|
# Main completion function
|
||
|
_arguments \
|
||
|
"${_options[@]}" \
|
||
|
":command:->command" \
|
||
|
"*::options:->options"
|
||
|
|
||
|
# Command completion
|
||
|
case $state in
|
||
|
command)
|
||
|
_describe 'commands' _commands
|
||
|
;;
|
||
|
options)
|
||
|
case $words[1] in
|
||
|
help | version | listorphans)
|
||
|
# No options for help | version command
|
||
|
;;
|
||
|
list)
|
||
|
_description list list '<filter>, e.g. *xorg*'
|
||
|
;;
|
||
|
listinst)
|
||
|
# TODO [<filter>]
|
||
|
_arguments -C \
|
||
|
"${_infooptions[@]}"
|
||
|
;;
|
||
|
printf)
|
||
|
# TODO <format>
|
||
|
# TODO [--sort=<format string2>] [--filter=<filter>]
|
||
|
local msg=(
|
||
|
'format string'
|
||
|
'[--sort=format_string2] [--filter=filter_string]'
|
||
|
''
|
||
|
'Supported format specifiers:'
|
||
|
'%n - name'
|
||
|
'%p - path'
|
||
|
'%v - version'
|
||
|
'%r - release'
|
||
|
'%d - description'
|
||
|
'%e - dependencies'
|
||
|
'%P - optional dependencies'
|
||
|
'%u - URL'
|
||
|
'%M - Maintainer'
|
||
|
'%R - Readme (yes/no)'
|
||
|
'%E - pre-install script (yes/no)'
|
||
|
'%O - post-install script (yes/no)'
|
||
|
'%l - is locked (yes/no)'
|
||
|
'%i - installed (no/yes/diff)'
|
||
|
)
|
||
|
;;
|
||
|
info | path | readme | ls)
|
||
|
_arguments \
|
||
|
":port:_allports"
|
||
|
;;
|
||
|
current)
|
||
|
_arguments -S \
|
||
|
":installedports:_installedports"
|
||
|
;;
|
||
|
cat | edit)
|
||
|
_arguments -C \
|
||
|
":port:_allports" \
|
||
|
":validfiles:_validfiles" \
|
||
|
;;
|
||
|
diff)
|
||
|
_arguments -S \
|
||
|
"*:outdatedports:_outdatedports" \
|
||
|
"${_diffoptions[@]}"
|
||
|
;;
|
||
|
quickdiff)
|
||
|
# No Options for quickdiff
|
||
|
;;
|
||
|
depends | quickdep | isinst)
|
||
|
_arguments -S \
|
||
|
":port:_allports" \
|
||
|
;;
|
||
|
dependent)
|
||
|
_arguments \
|
||
|
":port:_allports" \
|
||
|
"${_depoptions[@]}"
|
||
|
;;
|
||
|
deptree)
|
||
|
_arguments \
|
||
|
":port:_allports"
|
||
|
;;
|
||
|
dup | listlocked)
|
||
|
# No arguments for dup and listlocked commands
|
||
|
;;
|
||
|
search | dsearch)
|
||
|
# TODO <expr>
|
||
|
;;
|
||
|
fsearch)
|
||
|
# TODO <pattern>
|
||
|
;;
|
||
|
update | remove)
|
||
|
# TODO: highlight ports that have an update available?
|
||
|
# TODO: this completes only outdated once, if available,
|
||
|
# then show installedports..
|
||
|
_arguments -S \
|
||
|
":outdatedports:_outdatedports" \
|
||
|
"*:installedports:_installedports" \
|
||
|
"${_installoptions[@]}"
|
||
|
;;
|
||
|
install | depinst)
|
||
|
_arguments -S \
|
||
|
"*:notinstalledports:_notinstalledports" \
|
||
|
"${_installoptions[@]}"
|
||
|
;;
|
||
|
sysup)
|
||
|
_arguments -S \
|
||
|
"${_sysupoptions[@]}"
|
||
|
;;
|
||
|
lock)
|
||
|
_arguments -S \
|
||
|
"*:unlockedports:_unlockedports"
|
||
|
;;
|
||
|
unlock)
|
||
|
_arguments -S \
|
||
|
"*:lockedports:_lockedports"
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
esac
|