310 lines
11 KiB
Plaintext
310 lines
11 KiB
Plaintext
#compdef lunar lin lrm lvu
|
|
# ------------------------------------------------------------------------------
|
|
# Description
|
|
# -----------
|
|
#
|
|
# Completion script for Lunar (http://www.lunar-linux.org)
|
|
#
|
|
# Source: https://github.com/Valodim/lunar-zsh-completion
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
# Authors
|
|
# -------
|
|
#
|
|
# * Valodim (https://github.com/Valodim)
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
|
# vim: ft=zsh sw=2 ts=2 et
|
|
# ------------------------------------------------------------------------------
|
|
|
|
|
|
# completion for lunar itself (different name, see below)
|
|
_lunar_comp() {
|
|
local suf ret=1 curcontext="$curcontext"
|
|
local -a vals state line expl
|
|
|
|
# regular arguments, this will probably just hand down to the * command below
|
|
_arguments -C \
|
|
'(- :)-d[Enables debug messages]' \
|
|
'(- :)-h[Display help text]' \
|
|
'(- :)-v[Increases the level of message output]' \
|
|
'*::command:->command' && return 0
|
|
|
|
# complete the first word, ie. subcommand
|
|
if (( CURRENT == 1 )); then
|
|
local -a lunar_commands
|
|
# all lunar subcommands
|
|
lunar_commands=(
|
|
'prune:Removes old sources and install/compile logs'
|
|
'renew:Checks ver. against moonbase & recompiles if necessary'
|
|
'update:Fetches latest moonbase and then does a "renew"'
|
|
'rebuild:Recompiles all installed modules'
|
|
'optimize:Shortcut to the optimization menu'
|
|
'fix:Check and fix all modules and internal state of lunar'
|
|
'nofix:Check but do not fix modules and internal state'
|
|
'fixdepends:Check and fix the dependency database of lunar'
|
|
'set:Check internal variable(s) and assign their values'
|
|
'unset:Unsets an internal variable'
|
|
'resurrect:Force modulename(s) to be unpacked from /var/cache'
|
|
'install:Install a checklist of modules'
|
|
'remove:Remove a checklist of modules'
|
|
'hold:Place a hold on a checklist of modules'
|
|
'unhold:Remove a hold on a checklist of modules'
|
|
'exile:Remove a module a/o prevent it from being resurrected'
|
|
'unexile:Allows a module to be compiled|resurrected again')
|
|
|
|
# just show the commands with description
|
|
_describe -t commands 'lunar command' lunar_commands && ret=0
|
|
return ret
|
|
else
|
|
|
|
# at this point, we have to decide what to complete for specific subcommands
|
|
|
|
# make a list of subcommands with no further arguments for later
|
|
local -a lunar_no_args
|
|
lunar_no_args=( prune renew update rebuild optimize fix nofix fixdepends )
|
|
|
|
# update the current context
|
|
curcontext="${curcontext%:*:*}:lunar-$words[1]:"
|
|
# if there is a specific function of the form _lunar-subcommand
|
|
if (( $+functions[_lunar-$words[1]] )); then
|
|
# call that for completion
|
|
_call_function ret _lunar-$words[1]
|
|
elif [[ -n "${lunar_no_args[(r)${words[1]}]}" ]]; then
|
|
# all commands from the array above take no further arguments
|
|
_message "lunar ${words[1]} requires no arguments"
|
|
else
|
|
# by default, complete modules
|
|
_lunar_modules
|
|
fi
|
|
return ret
|
|
fi
|
|
}
|
|
|
|
# specific completion for lunar set
|
|
_lunar-set() {
|
|
# second argument: all lunar variables
|
|
if (( CURRENT == 2 )); then
|
|
local vars
|
|
vars=( ${(f)"$(cat /var/lib/lunar/unset.sh | cut -d' ' -f2)"} )
|
|
_describe -t modules 'lunar variable' vars && return 0
|
|
# third argument: some value
|
|
elif (( CURRENT == 3 )); then
|
|
_message "value"
|
|
# no further argument
|
|
else
|
|
_message "no further arguments"
|
|
fi
|
|
}
|
|
|
|
_lunar-unset() {
|
|
local vars
|
|
vars=( ${(f)"$(cat /var/lib/lunar/unset.sh | cut -d' ' -f2)"} )
|
|
_describe -t modules 'lunar variable' vars && return 0
|
|
}
|
|
|
|
_lunar-unhold() {
|
|
local vals
|
|
vals=( ${(f)"$(lvu held | sort | uniq)"} )
|
|
_describe -t modules 'held modules' vals && return 0
|
|
}
|
|
|
|
_lunar-unexile() {
|
|
local vals
|
|
vals=( ${(f)"$(lvu exiled | sort | uniq)"} )
|
|
_describe -t modules 'exiled modules' vals && return 0
|
|
}
|
|
|
|
_lrm() {
|
|
_arguments \
|
|
'(-d --debug)'{-d,--debug}'[Enables debug messages]' \
|
|
'(-D --downgrade)'{-D,--downgrade}'[downgrades a module]:module:_lunar_modules:version' \
|
|
'(-h --help)'{-h,--help}'[Displays this help text]' \
|
|
'(-k --keepconfig)'{-k,--keepconfig}'[remove module(s) but keep dependencies and config]' \
|
|
'(-n --nosustain)'{-n,--nosustain}'[removes module(s) even if they are sustained]' \
|
|
'(-u --upgrade)'{-u,--upgrade}'[remove the module but do not run scripts etc.]' \
|
|
'(-v --verbose)'{-v,--verbose}'[Increases the level of message output]' \
|
|
'(-p --purge)'{-p,--purge}'[Delete all modules that depend on the module(s) being removed as well]' \
|
|
'*:module:_lunar_installed_modules' && return 0
|
|
}
|
|
|
|
_lin() {
|
|
_arguments \
|
|
'(-c --compile)'{-c,--compile}'[Ignore /var/cache/lunar and compiles]' \
|
|
'(-d --debug)'{-d,--debug}'[Enables debug messages]' \
|
|
'--deps[Configure modules and determine dependencies]' \
|
|
'(-f --from)'{-f,--from}'[Specify an alternate for /var/spool/lunar]:directory:_files -/' \
|
|
'(-h --help)'{-h,--help}'[Displays help text]' \
|
|
'--opts[Add custom configure options to the module]:configure option string' \
|
|
'(-p --probe)'{-p,--probe}'[Only lin if not already installed]' \
|
|
'(-r --reconfigure)'{-r,--reconfigure}'[Select new dependencies for modules]' \
|
|
'(-R --resurrect)'{-R,--resurrect}'[Force to be unpacked from /var/cache/lunar]' \
|
|
'(-s --silent)'{-s,--silent}'[Decreases the level of message output]' \
|
|
'(-v --verbose)'{-v,--verbose}'[Increases the level of message output]' \
|
|
'(-w --want)'{-w,--want}'[Try to install a different version]:wanted version' \
|
|
'*:module:_lunar_modules' && return 0
|
|
}
|
|
|
|
# completion for lvu, very similar to the lunar one above (therefore uncommented)
|
|
_lvu() {
|
|
local suf ret=1 curcontext="$curcontext"
|
|
local -a vals state line expl
|
|
|
|
_arguments -C \
|
|
'(- :)-d[Enables debug messages]' \
|
|
'(- :)-h[Display help text]' \
|
|
'(- :)-v[Increases the level of message output]' \
|
|
'*::command:->command' && return 0
|
|
|
|
if (( CURRENT == 1 )); then
|
|
local -a lvu_commands
|
|
lvu_commands=(
|
|
'what:display a module''s description'
|
|
'short:display a module''s short description'
|
|
'where:display a module''s section'
|
|
'cd:change directory to module and execs a new shell'
|
|
'alien:discover untracked files'
|
|
'from:discover what installed a given file'
|
|
'leafs:display installed modules that have no explicit dependencies on them'
|
|
'orphans:display installed modules that are missing dependencies'
|
|
'conflicts:display conflicting files'
|
|
'held:display held modules'
|
|
'exiled:display exiled modules'
|
|
'expired:display a list of modules which need an update'
|
|
'info:display terse summary information about module'
|
|
'search:searches all modules long descriptions for phrase.'
|
|
'service:displays modules that provide that service'
|
|
'website:display a module''s website'
|
|
'install:display an install log'
|
|
'size:find and show installed size of a module or ALL (slow)'
|
|
'installed:display installed modules/version of module'
|
|
'compile:display a compile log'
|
|
'compiler:display the compiler version used'
|
|
'links:display a list of modules that this module links to'
|
|
'sources:display source files for a module'
|
|
'urls:display all URLs for a module'
|
|
'maintainer:display maintainer for a module'
|
|
'version:display version of module in moonbase'
|
|
'new:attempt to create a new module from scratch'
|
|
'edit:copy a module to zlocal for editing'
|
|
'diff:view changes on edited module'
|
|
'submit:attempt to submit a module to the lunar ML'
|
|
'unedit:delete zlocal copy of a module'
|
|
'sum:display checksums'
|
|
'md5sum:display md5sums'
|
|
'export:make snapshot of box''s configuration.'
|
|
'import:restores an exported snapshot.'
|
|
'section:display moonbase sections'
|
|
'moonbase:display text listing of the moonbase'
|
|
'html:display html listing of the moonbase'
|
|
'updatelog:display summary log of previous lunar update'
|
|
'activity:display main log file'
|
|
'newer:display available modules newer than Aug 01, 2003'
|
|
'older:display modules installed before Jan 01, 2003'
|
|
'voyeur:peak into module compilation'
|
|
'pam:display installed modules that are Linux-PAM aware'
|
|
'depends:displays installed modules that explicitly or recursively depend on this module.'
|
|
'tree:displays a tree of the module''s dependencies'
|
|
'stree:same as ''tree'' but highly abbreviated'
|
|
'eert:same as ''tree'' but reverse and installed deps only'
|
|
'leert:full reverse dependency tree')
|
|
|
|
_describe -t commands 'lvu command' lvu_commands && ret=0
|
|
|
|
return ret
|
|
elif (( CURRENT == 2 )); then
|
|
local -a lvu_no_args
|
|
lvu_no_args=( alien leafs orphans conflicts held exiled expired export moonbase html updatelog pam )
|
|
|
|
curcontext="${curcontext%:*:*}:lvu-$words[1]:"
|
|
if (( $+functions[_lvu-$words[1]] )); then
|
|
_call_function ret _lvu-$words[1]
|
|
elif [[ -n "${lvu_no_args[(r)${words[1]}]}" ]]; then
|
|
_message "lvu ${words[1]} requires no arguments"
|
|
else
|
|
_lunar_modules
|
|
fi
|
|
return ret
|
|
else
|
|
_message "No further arguments"
|
|
fi
|
|
|
|
}
|
|
|
|
_lvu-service() {
|
|
_alternative \
|
|
'service:service name:_lvu-service-service' \
|
|
'port:port number:_guard "[0-9]#" "port number"'
|
|
}
|
|
|
|
_lvu-service-service() {
|
|
local vals
|
|
vals=( ${(f)"$(cat /etc/services | grep -E -o '^(\w+)' | sort | uniq)"} )
|
|
_describe -t modules 'service' vals && return 0
|
|
}
|
|
|
|
_lvu-diff() {
|
|
local vals
|
|
vals=( /var/lib/lunar/moonbase/zlocal/*(/:t) )
|
|
_describe -t modules 'moonbase module from zlocal' vals && return 0
|
|
}
|
|
|
|
_lvu-unedit() {
|
|
local vals
|
|
vals=( /var/lib/lunar/moonbase/zlocal/*(/:t) )
|
|
_describe -t modules 'moonbase module from zlocal' vals && return 0
|
|
}
|
|
|
|
_lvu-newer() {
|
|
_message "date string"
|
|
}
|
|
|
|
_lvu-older() {
|
|
_message "date string"
|
|
}
|
|
|
|
_lvu-import() {
|
|
_files
|
|
}
|
|
|
|
_lvu-from() {
|
|
_files
|
|
}
|
|
|
|
_lvu-new() {
|
|
_message "module name"
|
|
}
|
|
|
|
_lvu-search() {
|
|
_message "search string"
|
|
}
|
|
|
|
# specific completion for moonbase modules
|
|
_lunar_modules() {
|
|
local vals
|
|
vals=( /var/lib/lunar/moonbase/*/*(/:t) )
|
|
_describe -t modules 'moonbase module' vals && return 0
|
|
}
|
|
|
|
# specific completion for moonbase modules
|
|
_lunar_installed_modules() {
|
|
local vals
|
|
vals=( ${(f)"$(lvu installed | cut -d':' -f1)"} )
|
|
_describe -t modules 'moonbase installed module' vals && return 0
|
|
}
|
|
|
|
# hub function called for completion
|
|
_lunar() {
|
|
# decide which completion to use
|
|
case "$service" in
|
|
lin) _lin "$@";;
|
|
lrm) _lrm "$@";;
|
|
lvu) _lvu "$@";;
|
|
lunar) _lunar_comp "$@";;
|
|
*) _message "unknown command $service";;
|
|
esac
|
|
}
|
|
|
|
_lunar "$@"
|