mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-19 11:31:26 +01:00
31571: Completion/Unix/Command/_vcsh: Update
This commit is contained in:
parent
e282fd8ecb
commit
f9851d817f
2 changed files with 137 additions and 16 deletions
|
@ -1,3 +1,7 @@
|
|||
2013-07-24 Richard Hartmann <richih.mailinglist@gmail.com>
|
||||
|
||||
* 31571: Completion/Unix/Command/_vcsh: Update
|
||||
|
||||
2013-07-24 Peter Stephenson <p.stephenson@samsung.com>
|
||||
|
||||
* Src/hist.c: 31570: with HIST_REDUCE_BLANKS don't truncate
|
||||
|
|
|
@ -1,18 +1,135 @@
|
|||
#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 () {
|
||||
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 () {
|
||||
(( CURRENT == 2 )) && __vcsh_repositories
|
||||
}
|
||||
|
||||
function _vcsh-enter () {
|
||||
(( CURRENT == 2 )) && __vcsh_repositories
|
||||
}
|
||||
|
||||
function _vcsh-help () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-init () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-list () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-list-tracked () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-list-tracked-by () {
|
||||
(( CURRENT == 2 )) && __vcsh_repositories
|
||||
}
|
||||
|
||||
function _vcsh-pull () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-push () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-rename () {
|
||||
(( CURRENT == 2 )) && __vcsh_repositories
|
||||
(( CURRENT == 3 )) && _message "new repository name"
|
||||
(( CURRENT > 3 )) && _nothing
|
||||
}
|
||||
|
||||
function _vcsh-run () {
|
||||
(( CURRENT == 2 )) && __vcsh_repositories
|
||||
if (( CURRENT >= 3 )); then
|
||||
words=( "${(@)words[3,-1]}" )
|
||||
(( CURRENT -= 2 ))
|
||||
_complete
|
||||
fi
|
||||
}
|
||||
|
||||
function _vcsh-upgrade () {
|
||||
(( CURRENT == 2 )) && __vcsh_repositories
|
||||
}
|
||||
|
||||
function _vcsh-version () {
|
||||
_nothing
|
||||
}
|
||||
|
||||
function _vcsh-which () {
|
||||
_files
|
||||
}
|
||||
|
||||
function _vcsh-write-gitignore () {
|
||||
(( CURRENT == 2 )) && __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"
|
||||
"pull:pull from all vcsh remotes"
|
||||
"rename:rename a repository"
|
||||
"run:run command with <\$GIT_DIR> and <\$GIT_WORK_TREE> set"
|
||||
"upgrade:upgrade repository to currently 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.
|
||||
_dispatch git git
|
||||
else
|
||||
curcontext="${curcontext%:*:*}:vcsh-${vcshcommand}:"
|
||||
_call_function ret _vcsh-${vcshcommand}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_vcsh "$@"
|
||||
|
|
Loading…
Reference in a new issue