Skip to content
Snippets Groups Projects
Commit b04d8138 authored by Richard Hartmann's avatar Richard Hartmann
Browse files

Improve zsh completion; work in progress

parent 17cd983a
No related branches found
No related tags found
No related merge requests found
#compdef vcsh
_arguments \
':subcommand:((
clone\:"clone from repo"
help\:"display help"
delete\:"delete repo"
enter\:"Enter repo; spawn new \$SHELL"
init\:"init & clone from repo"
list\:"list all repos"
list-tracked\:"list all files tracked by vcsh"
list-tracked-by\:"list files tracked by a repo"
rename\:"rename repo"
run\:"run command on repo"
setup\:"set up repo with recommended settings"
write-gitignore\:"write .gitignore.d/foo via git ls-files"
\<REPO\>\:"Run git command directly"
))'
function __vcsh_repositories () {
#TODO list only one repo and stop
local expl
local -a repos
repos=( ${(f)"$(command vcsh list)"} )
_describe -t repos 'repositories' repos
}
function __vcsh_not_implemented_yet () {
_message "Subcommand completion '${1#*-}': not implemented yet"
}
function _vcsh-clone () {
__vcsh_not_implemented_yet "$0" #TODO
}
function _vcsh-delete () {
__vcsh_repositories
}
function _vcsh-enter () {
__vcsh_repositories
}
function _vcsh-help () {
_nothing
}
function _vcsh-init () {
_nothing
}
function _vcsh-list () {
_nothing
}
function _vcsh-list-tracked () {
_nothing
}
function _vcsh-list-tracked-by () {
__vcsh_repositories
}
function _vcsh-rename () {
__vcsh_repositories
#TODO tell the user to write new stuff
}
function _vcsh-run () {
__vcsh_repositories
_commands
#TODO normal commands
}
function _vcsh-setup () {
__vcsh_repositories
}
function _vcsh-version () {
}
function _vcsh-which () {
__vcsh_not_implemented_yet "$0" #TODO
}
function _vcsh-write-gitignore () {
__vcsh_repositories
}
function _vcsh () {
local curcontext="${curcontext}"
local state vcshcommand
local -a args subcommands
subcommands=(
"clone:clone an existing repository"
"delete:delete an existing repository"
"enter:enter repository; spawn new <\$SHELL>"
"help:display help"
"init:initialize an empty repository"
"list:list all local vcsh repositories"
"list-tracked:list all files tracked by vcsh"
"list-tracked-by:list files tracked by a repository"
"rename:rename a repository"
"run:run command with <\$GIT_DIR> and <\$GIT_WORK_TREE> set"
"setup:set up repository with recommended settings"
"version:print version information"
"which:find <substring> in name of any tracked file"
"write-gitignore:write .gitignore.d/<repo> via git ls-files"
)
args=(
'-c[source <file> prior to other configuration files]:config files:_path_files'
'-d[enable debug mode]'
'-v[enable verbose mode]'
'*:: :->subcommand_or_options_or_repo'
)
_arguments -C ${args} && return
if [[ ${state} == "subcommand_or_options_or_repo" ]]; then
if (( CURRENT == 1 )); then
_describe -t subcommands 'vcsh sub-commands' subcommands
__vcsh_repositories
else
vcshcommand="${words[1]}"
if ! (( ${+functions[_vcsh-$vcshcommand]} )); then
# There is no handler function, so this is probably the name
# of a repository. Act accordingly.
_message "git sub-command"
#TODO and now we need to complete on git subcommands
else
curcontext="${curcontext%:*:*}:vcsh-${vcshcommand}:"
_call_function ret _vcsh-${vcshcommand}
fi
fi
fi
}
_vcsh "$@"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment