This commit is contained in:
GitHub Merge Button 2012-03-27 16:07:48 -07:00
commit 5dd78eba8f
9 changed files with 940 additions and 35 deletions

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "zsh-syntax-highlighting"]
path = zsh-syntax-highlighting
url = git@github.com:tictactix/zsh-syntax-highlighting.git
[submodule "plugins/zsh-syntax-highlighting"]
path = plugins/zsh-syntax-highlighting
url = git@github.com:tictactix/zsh-syntax-highlighting.git

View file

@ -1,24 +1,4 @@
# Push and pop directories on directory stack
alias pu='pushd'
alias po='popd'
# Basic directory operations
alias ...='cd ../..'
alias -- -='cd -'
# Super user
alias _='sudo'
#alias g='grep -in'
alias g='grep -in'
# Show history
alias history='fc -l 1'
# List direcory contents
alias lsa='ls -lah'
alias l='ls -la'
alias ll='ls -l'
alias sl=ls # often screw this up
alias afind='ack-grep -il'

View file

@ -24,6 +24,8 @@ bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
bindkey '^[[Z' reverse-menu-complete
bindkey '^[[U' backward-kill-line
# Make the delete key (or Fn + Delete on the Mac) work instead of outputting a ~
bindkey '^?' backward-delete-char
@ -35,17 +37,17 @@ bindkey "\e[3~" delete-char
#bindkey -e ## emacs key bindings
#
#bindkey '^[[A' up-line-or-search
#bindkey '^[[B' down-line-or-search
#bindkey '^[^[[C' emacs-forward-word
#bindkey '^[^[[D' emacs-backward-word
bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search
bindkey '^[^[[C' emacs-forward-word
bindkey '^[^[[D' emacs-backward-word
#
#bindkey -s '^X^Z' '%-^M'
#bindkey '^[e' expand-cmd-path
#bindkey '^[^I' reverse-menu-complete
#bindkey '^X^N' accept-and-infer-next-history
#bindkey '^W' kill-region
#bindkey '^I' complete-word
## Fix weird sequence that rxvt produces
#bindkey -s '^[[Z' '\t'
bindkey -s '^X^Z' '%-^M'
bindkey '^[e' expand-cmd-path
bindkey '^[^I' reverse-menu-complete
bindkey '^X^N' accept-and-infer-next-history
bindkey '^W' kill-region
bindkey '^I' complete-word
# Fix weird sequence that rxvt produces
bindkey -s '^[[Z' '\t'
#

View file

@ -23,7 +23,7 @@ function omz_termsupport_precmd {
#Appears at the beginning of (and during) of command execution
function omz_termsupport_preexec {
emulate -L zsh
setopt extended_glob
setopt extendedglob
local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
title "$CMD" "%100>...>$2%<<"
}

89
plugins/legit/_legit Normal file
View file

@ -0,0 +1,89 @@
#compdef legit
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for legit (https://github.com/kennethreitz/legit).
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Ryan James (https://github.com/autoplectic)
#
# ------------------------------------------------------------------------------
# -*- mode: zsh; -*-
# ------------------------------------------------------------------------------
_legit ()
{
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \
'1:command:->command' \
'*::options:->options'
case $state in
(command)
local -a subcommands
subcommands=(
'settings: Display and edit the current Legit settings.'
'branches: Get a nice pretty list of available branches.'
'sync: Synchronizes the given branch. Defaults to current branch. Stash, Fetch, Auto-Merge/Rebase, Push, and Unstash. You can only sync published branches.'
'switch: Switches to specified branch. Defaults to current branch. Automatically stashes and unstashes any changes.'
'sprout: Creates a new branch off of the specified branch. Switches to it immediately.'
'graft: Merges specified branch into the second branch, and removes it. You can only graft unpublished branches.'
'publish: Publishes specified branch to the remote.'
'unpublish: Removes specified branch from the remote.'
'harvest: Syncs a branch with a given branch. Defaults to current.'
)
_describe -t commands 'legit' subcommands
;;
(options)
case $line[1] in
(settings|branches)
;;
(sync|switch|publish|unpublish)
_arguments \
':branch:__git_branch_names'
;;
(sprout)
_arguments \
'1:branch:__git_branch_names' \
'2:new-branch'
;;
(graft)
_arguments \
'1:branch:__git_branch_names' \
'2:into-branch:__git_branch_names'
;;
(harvest)
_arguments \
'1:from-branch:__git_branch_names' \
'2:to-branch:__get_branch_names'
;;
esac
esac
}
__git_branch_names () {
local expl
declare -a branch_names
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
__git_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names
}
__git_command_successful () {
if (( ${#pipestatus:#0} > 0 )); then
_message 'not a git repository'
return 1
fi
return 0
}

623
plugins/mvn/_mvn Normal file
View file

@ -0,0 +1,623 @@
#compdef mvn mvnDebug
# ------------------------------------------------------------------------------
# Copyright (c) 2010-2011 Github zsh-users - http://github.com/zsh-users
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the zsh-users nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for Maven (http://maven.apache.org).
#
# Status: See FIXME and TODO tags.
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Julien Nicoulaud <julien.nicoulaud@gmail.com>
#
# ------------------------------------------------------------------------------
# Notes
# -----
#
# * By default advanced phases are displayed only if you start typing them. To have
# them always displayed:
#
# zstyle ':completion:*:mvn:*' show-all-phases true
#
# * By default full form plugins (groupId:artifactId[:version]) are only shown if you
# start typing them. To have them always displayed:
#
# zstyle ':completion:*:mvn:*' show-full-form-plugins true
#
# * By default only the plugins for which the completion has already been
# called ("mvn plugin:<TAB>") are shown. To define your own list of plugins:
#
# maven_plugins=(jboss tomcat gwt android)
# zstyle ':completion:*:mvn:*' plugins $maven_plugins
#
# * To have a better presentation of completions:
#
# zstyle ':completion:*:*:mvn:*:matches' group 'yes'
# zstyle ':completion:*:*:mvn:*:options' description 'yes'
# zstyle ':completion:*:*:mvn:*:options' auto-description '%d'
# zstyle ':completion:*:*:mvn:*:descriptions' format $'\e[1m -- %d --\e[22m'
# zstyle ':completion:*:*:mvn:*:messages' format $'\e[1m -- %d --\e[22m'
# zstyle ':completion:*:*:mvn:*:warnings' format $'\e[1m -- No matches found --\e[22m'
#
# ------------------------------------------------------------------------------
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
# vim: ft=zsh sw=2 ts=2 et
# ------------------------------------------------------------------------------
typeset -A opt_args
local context state line
_mvn() {
local curcontext="$curcontext" maven_version excl_opts
excl_opts=(-h --help -v --version -ep --encrypt-password -emp --encrypt-master-password)
_pick_variant -r maven_version maven3='Maven 3' maven2='Maven 2' unknown --version
if [[ $maven_version == 'maven3' ]]; then
opts=(
"($excl_opts -T --threads)"{-T,--threads}'[thread count, for instance 2.0C where C is core multiplied]:thread count:_mvn_thread_counts'
"($excl_opts -t --toolchains)"{-t,--toolchains}'[alternate path for the user toolchains file]:toolchains file:_mvn_toolchains_files'
"($excl_opts -l --log-file)"{-l,--log-file}'[log file to where all build output will go]:log file:_mvn_log_files'
)
elif [[ $maven_version == 'maven2' ]]; then
opts=(
"($excl_opts -cpu --check-plugin-updates -up --update-plugins -npu --no-plugin-updates -o --offline)"{-cpu,--check-plugin-updates,-up,--update-plugins}'[force upToDate check for any relevant registered plugins]'
"($excl_opts -npr --no-plugin-registry)"{-npr,--no-plugin-registry}'[don'\''t use plugin-registry.xml for plugin versions]'
"($excl_opts -npu --no-plugin-updates -cpu --check-plugin-updates -up --update-plugins)"{-npu,--no-plugin-updates}'[suppress upToDate check for any relevant registered plugins]'
"($excl_opts -r --reactor)"{-r,--reactor}'[dynamically build reactor from subdirectories]:reactor:_mvn_reactors'
)
fi
[[ -n ${(M)words:#"-pl"} || -n ${(M)words:#"--projects"} ]] && opts+=(
"($excl_opts -am --also-make)"{-am,--also-make}'[if project list is specified, also build projects required by the list]'
"($excl_opts -amd --also-make-dependents)"{-amd,--also-make-dependents}'[if project list is specified, also build projects that depend on projects on the list]'
)
_arguments -C \
"(- : *)"{-h,--help}'[display help information]' \
"(- : *)"{-v,--version}'[display version information]' \
"(- : *)"{-emp,--encrypt-master-password}'[encrypt master security password]:master password:_mvn_passwords' \
"(- : *)"{-ep,--encrypt-password}'[encrypt server password]:password:_mvn_passwords' \
"($excl_opts -B --batch-mode)"{-B,--batch-mode}'[run in non-interactive (batch) mode]' \
"($excl_opts -V --show-version)"{-V,--show-version}'[display version information without stopping build]' \
"($excl_opts -q --quiet -X --debug)"{-q,--quiet}'[quiet output, only show errors]' \
"($excl_opts -X --debug -q --quiet)"{-X,--debug}'[produce execution debug output]' \
"($excl_opts -N --non-recursive)"{-N,--non-recursive}'[do not recurse into sub-projects]' \
"($excl_opts -C --strict-checksums -c --lax-checksums)"{-C,--strict-checksums}'[fail the build if checksums don'\''t match]' \
"($excl_opts -c --lax-checksums -C --strict-checksums)"{-c,--lax-checksums}'[warn if checksums don'\''t match]' \
"($excl_opts -e --errors)"{-e,--errors}'[produce execution error messages]' \
"($excl_opts -f --file)"{-f,--file}'[force the use of an alternate POM file]:POM file:_mvn_pom_files' \
"($excl_opts -s --settings)"{-s,--settings}'[alternate path for the user settings file]:settings file:_mvn_settings_files' \
"($excl_opts -gs --global-settings)"{-gs,--global-settings}'[alternate path for the global settings file]:global settings file:_mvn_settings_files' \
"($excl_opts -fae --fail-at-end -ff --fail-fast -fn --fail-never)"{-fae,--fail-at-end}'[only fail the build afterwards, allow all non-impacted builds to continue]' \
"($excl_opts -ff --fail-fast -fae --fail-at-end -fn --fail-never)"{-ff,--fail-fast}'[stop at first failure in reactorized builds]' \
"($excl_opts -fn --fail-never -fae --fail-at-end -ff --fail-fast)"{-fn,--fail-never}'[nerver fail the build, regardless of project result]' \
"($excl_opts)*"{-P,--activate-profiles}'[comma-delimited list of profiles to activate]:profile:_mvn_profiles -s ,' \
"($excl_opts -pl --projects)"{-pl,--projects}'[build specified reactor projects instead of all projects]:project list:_mvn_projects -s ,' \
"($excl_opts -rf --resume-from)"{-rf,--resume-from}'[resume reactor from specified project]:project:_mvn_projects' \
"($excl_opts -o --offline -U --update-snapshots -cpu --check-plugin-updates -up --update-plugins)"{-o,--offline}'[work offline]' \
"($excl_opts -U --update-snapshots -nsu --no-snapshot-updates -o --offline)"{-U,--update-snapshots}'[force a check for updated releases and snapshots on remote repositories]' \
"($excl_opts -nsu --no-snapshot-updates -U --update-snapshots -o --offline)"{-nsu,--no-snapshot-updates}'[Supress SNAPSHOT updates]' \
"*"{-D-,--define}'[define a system property]:property:_mvn_properties' \
"${opts[@]}" \
"($excl_opts)*: :_mvn_args"
}
(( $+functions[_mvn_args] )) ||
_mvn_args() {
_alternative \
'phases:phase:_mvn_phases' \
'plugin-colon-goals:plugin colon goal:_mvn_plugin_colon_goals'
}
(( $+functions[_mvn_phases] )) ||
_mvn_phases() {
local phases
phases=(
'clean:remove all files generated by the previous build'
'compile:compile the source code of the project'
'test:run tests using a suitable unit testing framework'
'package:take the compiled code and package it in its distributable format, such as a JAR'
'integration-test:process and deploy the package if necessary into an environment where integration tests can be run'
'verify:run any checks to verify the package is valid and meets quality criteria'
'install:install the package into the local repository, for use as a dependency in other projects locally'
'deploy:done in an integration or release environment, copies the final package to the remote repository'
'site:generates the projects site documentation'
'site-deploy:deploys the generated site documentation to the specified web server'
)
if [[ $#PREFIX -gt 0 ]] || zstyle -t ":completion:${curcontext}:" show-all-phases; then
phases+=(
'pre-clean:executes processes needed prior to the actual project cleaning'
'post-clean:executes processes needed to finalize the project cleaning'
'validate:validate the project is correct and all necessary information is available'
'initialize:initialize build state, e.g. set properties or create directories'
'generate-sources:generate any source code for inclusion in compilation'
'process-sources:process the source code, for example to filter any values'
'generate-resources:generate resources for inclusion in the package'
'process-resources:copy and process the resources into the destination directory, ready for packaging'
'process-classes:post-process the generated files from compilation'
'generate-test-sources:generate any test source code for inclusion in compilation'
'process-test-sources:process the test source code, for example to filter any values'
'generate-test-resources:create resources for testing'
'process-test-resources:copy and process the resources into the test destination directory'
'test-compile:compile the test source code into the test destination directory'
'process-test-classes:post-process the generated files from test compilation'
'prepare-package:perform any operations necessary to prepare a package before the actual packaging'
'pre-integration-test:perform actions required before integration tests are executed'
'post-integration-test:perform actions required after integration tests have been executed'
'pre-site:executes processes needed prior to the actual project site generation.'
'post-site:executes processes needed to finalize the site generation, and to prepare for site deployment'
)
fi
_describe -t 'phases' "phase" phases
}
(( $+functions[_mvn_plugins] )) ||
_mvn_plugins() {
local ret=1
if [[ $words[CURRENT] == *.* ]] || zstyle -t ":completion:${curcontext}:" show-full-form-plugins; then
_wanted full-form-plugins expl 'full form plugin' _mvn_full_form_plugins && ret=0
else
_wanted plugin-prefixes expl 'plugin prefix' _mvn_plugin_prefixes && ret=0
fi
return ret
}
(( $+functions[_mvn_plugin_colon_goals] )) ||
_mvn_plugin_colon_goals() {
local ret=1
if [[ $words[CURRENT] == *.* ]] || zstyle -t ":completion:${curcontext}:" show-full-form-plugins; then
_wanted full-form-plugin-colon-goals expl 'full form plugin colon goal' _mvn_full_form_plugin_colon_goals && ret=0
else
_wanted plugin-prefix-colon-goals expl 'plugin prefix colon goal' _mvn_plugin_prefix_colon_goals && ret=0
fi
return ret
}
(( $+functions[_mvn_plugin_prefix_colon_goals] )) ||
_mvn_plugin_prefix_colon_goals() {
local ret=1
if compset -P '*:'; then
local plugin="${IPREFIX%:}"
_wanted goals expl "${plugin} plugin goal" _mvn_plugin_goals $plugin && ret=0
else
_wanted plugin-prefixes expl 'plugin prefix' _mvn_plugin_prefixes -qS: && ret=0
fi
return ret
}
(( $+functions[_mvn_plugin_prefixes] )) ||
_mvn_plugin_prefixes() {
local plugins
zstyle -a ":completion:${curcontext}:" plugins plugins
[[ $#plugins -eq 0 ]] && plugins=($(__mvn_get_plugin_prefix $(__mvn_get_cache_dir)/mvn/plugins/*(:t)))
_describe -t plugin-prefixes 'plugin prefix' plugins $@
}
(( $+functions[_mvn_full_form_plugin_colon_goals] )) ||
_mvn_full_form_plugin_colon_goals() {
local ret=1
# FIXME Duplicates _mvn_full_form_plugins
if compset -P 1 '*:'; then
local groupId="${${IPREFIX%:}##*:}"
if compset -P 1 '*:'; then
local artifactId="${${IPREFIX%:}##*:}"
if compset -P 1 '*:'; then
local version="${${IPREFIX%:}##*:}"
_wanted goals expl "${artifactId}:${version} goal" _mvn_plugin_goals "${groupId}:${artifactId}:${version}" && ret=0
else
_alternative \
"versions:${artifactId} version:_mvn_artifact_versions -qS: ${groupId}:${artifactId}" \
"goals:${artifactId} goal:_mvn_plugin_goals ${groupId}:${artifactId}" \
&& ret=0
fi
else
_wanted artifactIds expl "${groupId} artifactId" _mvn_groupId_artifactIds -qS: $groupId && ret=0
fi
else
_wanted groupIds expl "groupId" _mvn_groupIds -qS: && ret=0
fi
return ret
}
(( $+functions[_mvn_full_form_plugins] )) ||
_mvn_full_form_plugins() {
local ret=1 chunk="${PREFIX%%:*}"
if compset -P 1 '*:'; then
local groupId="$chunk"
chunk="${PREFIX%%:*}"
if compset -P 1 '*:'; then
_wanted versions expl "${current} version" _mvn_artifact_versions $@ "${groupId}:${chunk}" && ret=0
else
_wanted artifactIds expl "${groupId} artifactId" _mvn_groupId_artifactIds -qS: "${groupId}" && ret=0
fi
else
_wanted groupIds expl "groupId" _mvn_groupIds -qS: && ret=0
fi
return ret
}
(( $+functions[_mvn_groupIds] )) ||
_mvn_groupIds() {
local repository_location=$(__mvn_get_repository_location) update_policy ret=1
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
[[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_groupIds_caching_policy
if [[ -d $repository_location ]]; then
unset _groupIds
if ( [[ ${+_groupIds} -eq 0 ]] || _cache_invalid "mvn/repositories/${repository_location}/groupIds" ) && ! _retrieve_cache "mvn/repositories/${repository_location}/groupIds"; then
_groupIds=($repository_location/**/)
_groupIds=(${${${(u)_groupIds:h:h}#"$repository_location/"}//\//.})
[[ $#_groupIds -gt 0 ]] && _store_cache "mvn/repositories/${repository_location}/groupIds" _groupIds
fi
[[ $#_groupIds -gt 0 ]] && _multi_parts $@ . _groupIds && ret=0
fi
return ret
}
(( $+functions[_mvn_groupId_artifactIds] )) ||
_mvn_groupId_artifactIds() {
local groupId_repository_location="${$(__mvn_get_repository_location)}/${${@[-1]}//\.//}" ret=1
if [[ -d $groupId_repository_location ]]; then
local artifactIds; artifactIds=($groupId_repository_location/*/*/*.pom(:h:h:t))
_describe -t artifactIds "artifactId" artifactIds $@[0,-2] && ret=0
fi
return ret
}
(( $+functions[_mvn_artifact_versions] )) ||
_mvn_artifact_versions() {
local artifact_repository_location="${$(__mvn_get_repository_location)}/${${@[-1]}//[\.:]//}" ret=1
if [[ -d $artifact_repository_location ]]; then
local versions; versions=($artifact_repository_location/*/*.pom(:h:t))
_describe -t versions "version" versions $@[0,-2]
fi
return ret
}
(( $+functions[_mvn_plugin_goals] )) ||
_mvn_plugin_goals() {
local ret=1 plugin="$@[-1]" update_policy
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
[[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_goals_caching_policy
unset _goals
if ( [[ ${+_goals} -eq 0 ]] || _cache_invalid "mvn/plugins/${plugin}" ) && ! _retrieve_cache "mvn/plugins/${plugin}"; then
setopt localoptions extendedglob
_goals=(${(s:,,,:)${${${(f)${${${(f)${${${${(F)${(S)${(f)"$(_call_program goals $words[1] -N org.apache.maven.plugins:maven-help-plugin:2.1.1:describe -Dplugin=$plugin)"}//#$(__mvn_get_plugin_prefix $plugin):/,,,}}:#*BUILD FAILURE*}#*This plugin has*goals#:}%For more information, run \'mvn help:describe*}}//:/\\:}}}// ##/ }// Description\\: /:}})
[[ $#_goals -gt 0 ]] && _store_cache "mvn/plugins/${plugin}" _goals
fi
[[ $#_goals -gt 0 ]] && _describe -t "goals" "${plugin} goal" _goals $@[0,-2] && ret=0
return ret
}
(( $+functions[_mvn_profiles] )) ||
_mvn_profiles() {
# FIXME Use "mvn help:all-profiles" output instead of parsing settings and pom files...
# Blocked on http://jira.codehaus.org/browse/MPH-82 and http://jira.codehaus.org/browse/MPH-83
local profs update_policy settings_file=$(__mvn_get_settings_file) parent_pom_file=$(__mvn_get_parent_pom_file) cache_name profiles_section ret=1
# TODO Should be split into _mvn_profiles/mvn_profiles_lists
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
[[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_profiles_caching_policy
profs=()
# Resolve profiles from settings.xml
if [[ -f $settings_file ]]; then
unset _profiles
cache_name="mvn/profiles${settings_file:A}" # FIXME Don't use A modifier, it is only available on Zsh >= 4.3.10
if ( [[ ${+_profiles} -eq 0 ]] || _cache_invalid "$cache_name" ) && ! _retrieve_cache "$cache_name"; then
_profiles=()
profiles_section="${(M)${(f)$(<$settings_file)}:#*<profiles>*}"
if [[ -n "$profiles_section" ]]; then
for profile in ${(s:,,,:)${${${(S)${(S)${(S)${(S)${${profiles_section#*<profile>}%</profile>*}//<repositories>*<\/repositories>}//<pluginRepositories>*<\/pluginRepositories>}//<build>*<\/build>}//<\/id>*<id>/,,,}##*<id>}%%</id>*}}; do
[[ -z ${(M)profiles:#"$profile"*} ]] && _profiles+=("$profile"'['"in settings file"']')
done
fi
[[ $#_profiles -gt 0 ]] && _store_cache "$cache_name" _profiles
fi
profs+=($_profiles)
fi
# Resolve project profiles
if [[ -f $parent_pom_file ]]; then
unset _profiles
cache_name="mvn/profiles${parent_pom_file:A}" # FIXME Don't use A modifier, it is only available on Zsh >= 4.3.10
if ( [[ ${+_profiles} -eq 0 ]] || _cache_invalid "$cache_name" ) && ! _retrieve_cache "$cache_name"; then
_profiles=()
setopt localoptions extendedglob
for file in ${parent_pom_file:h}/**/pom.xml~*target\/*; do # FIXME project.build.directory is not always target/
profiles_section="${(M)${(f)$(<$file)}:#*<profiles>*}"
if [[ -n "$profiles_section" ]]; then
for profile in ${(s:,,,:)${${${(S)${(S)${(S)${(S)${${profiles_section#*<profile>}%</profile>*}//<repositories>*<\/repositories>}//<pluginRepositories>*<\/pluginRepositories>}//<build>*<\/build>}//<\/id>*<id>/,,,}##*<id>}%%</id>*}}; do
[[ -z ${(M)profiles:#"$profile"*} ]] && _profiles+=("$profile"'['"in ${file#${parent_pom_file:h}\/}"']')
done
fi
done
[[ $#_profiles -gt 0 ]] && _store_cache "$cache_name" _profiles
fi
profs+=($_profiles)
fi
compset -P '-'; compset -P '+'; compset -P '!' # FIXME Only works for the first profile
[[ $#profs -gt 0 ]] && _values $@ 'profile' "${profs[@]}" && ret=0
return ret
}
(( $+functions[_mvn_projects] )) ||
_mvn_projects() {
# TODO Projects can also be given in the form [groupId:]artifactId.
# TODO Should be split into _mvn_projects/mvn_projects_lists
local pom_file=$(__mvn_get_parent_pom_file) ret=1
if [[ -f $pom_file ]]; then
setopt localoptions extendedglob
local projects; projects=(${pom_file:h}/*/**/pom.xml~*target\/*) # FIXME project.build.directory is not always target/
projects=(${${projects#.\/}:h})
[[ $#projects -gt 0 ]] && _values "$@" 'project' "${projects[@]}" && ret=0
fi
return ret
}
(( $+functions[_mvn_properties] )) ||
_mvn_properties() {
local ret=1
if compset -P '*='; then
_wanted property-values expl 'property value' _mvn_property_values ${${IPREFIX%=}#-D} && ret=0
else
_wanted property-names expl 'property name' _mvn_property_names -qS= && ret=0
fi
return ret
}
(( $+functions[_mvn_property_names] )) ||
_mvn_property_names() {
# FIXME "-qS=" should be inherited from _mvn_properties
local alternatives; alternatives=(
"common-property-names:common property name:_mvn_common_property_names -qS="
)
for plugin_colon_goal in ${(M)words:#[^-]*:*}; do
alternatives+=("plugin-property-names:plugin property name:_mvn_plugin_goal_property_names -qS= ${plugin_colon_goal}")
done
_alternative "${alternatives[@]}"
}
(( $+functions[_mvn_common_property_names] )) ||
_mvn_common_property_names() {
local properties; properties=(
'skipTests:skip tests execution'
'maven.test.skip:skip tests compilation and execution'
'gpg.passphrase:gpg passphrase'
)
_describe -t 'common-property-names' 'common property name' properties $@
}
(( $+functions[_mvn_plugin_goal_property_names] )) ||
_mvn_plugin_goal_property_names() {
local plugin_colon_goal="$@[-1]" update_policy ret=1
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
[[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_properties_caching_policy
unset _properties
if ( [[ ${+_properties} -eq 0 ]] || _cache_invalid "mvn/plugins/${plugin_colon_goal}" ) && ! _retrieve_cache "mvn/plugins/${plugin_colon_goal}"; then
# FIXME Does not work for:
# android:apk (new line before expression)
# ear:ear (unknown cause)
_properties=(${(M)${(ps:,,,:)${${${${(pj: :)${${${(f)${"$(_call_program properties $words[1] -N org.apache.maven.plugins:maven-help-plugin:2.1.1:describe -Dplugin=${plugin_colon_goal%:*} -Dgoal=${plugin_colon_goal##*:} -Ddetail)"#*Available parameters:}%%\[INFO\]*}//# [a-z]*/,,,}##*Expression: \$\{}}//\}[[:space:]]##/:}//[[:space:]]##/ }//[[:space:]]#,,,[[:space:]]#/,,,}}:#[a-zA-Z]##:*})
[[ $#_properties -gt 0 ]] && _store_cache "mvn/plugins/${plugin_colon_goal}" _properties
fi
[[ $#_properties -gt 0 ]] && _describe -t "${plugin_colon_goal//:/-}-property-names" "${plugin_colon_goal} property name" _properties $@[0,-2] && ret=0
return ret
}
(( $+functions[_mvn_property_values] )) ||
_mvn_property_values() {
local ret=1
setopt localoptions extendedglob
case $@[-1] in
((#i)*pomFile*) _wanted pom-files expl 'POM file' _mvn_pom_files && ret=0;;
((#i)*file*) _wanted files expl 'file' _files && ret=0;;
((#i)*groupId*) _wanted groupIds expl 'groupId' _mvn_groupIds && ret=0;;
((#i)*artifactId*) _wanted artifactIds expl 'artifactId' _mvn_groupId_artifactIds ${${(M)${(ps.:.)opt_args[(K)-D]}:#groupId=*}#groupId=} && ret=0;;
((#i)*version*) _wanted versions expl 'version' _mvn_artifact_versions ${${(M)${(ps.:.)opt_args[(K)-D]}:#groupId=*}#groupId=}:${${(M)${(ps.:.)opt_args[(K)-D]}:#artifactId=*}#artifactId=} && ret=0;;
((#i)*repositoryId*) _message -e repositoryIds 'repositoryId' && ret=0;; # TODO Not implemented
((#i)*classifier*) _message -e classifiers 'classifier' && ret=0;;
((#i)*scope*) _wanted scopes expl 'scope' _mvn_scopes && ret=0;;
((#i)*url*) _wanted urls expl 'url' _urls && ret=0;; # TODO Use _alternative and add repository urls from settings + projects
((#i)*(password|passphrase)*) _wanted passwords expl password _mvn_passwords && ret=0;;
((#i)*(createChecksum|generatePom|maven.test.skip)*) _wanted booleans expl 'boolean' _mvn_booleans && ret=0;;
((#i)*user*) _wanted users expl 'user' _users && ret=0;; # TODO Use _alternative and add repository usernames from settings + projects
((#i)*plugin*) _wanted plugin expl 'plugin' _mvn_plugins && ret=0;;
(*) _default && ret=0;;
esac
return ret
}
(( $+functions[_mvn_scopes] )) ||
_mvn_scopes() {
local scopes; scopes=(
'compile:default scope, used if none is specified. Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects.'
'provided:much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.'
'runtime:indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath.'
'test:indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases.'
'system:similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.'
'import:only used on a dependency of type pom in the <dependencyManagement> section. It indicates that the specified POM should be replaced with the dependencies in that POM'\''s <dependencyManagement> section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.'
)
_describe -t scopes 'scope' scopes
}
(( $+functions[_mvn_thread_counts] )) ||
_mvn_thread_counts() {
local thread_counts; thread_counts=(
'1:build with 1 thread' '1C:build with 1 thread per CPU core'
'2:build with 2 threads' '2C:build with 2 threads per CPU core'
'3:build with 3 threads' '3C:build with 3 threads per CPU core'
'4:build with 4 threads' '4C:build with 4 threads per CPU core'
'5:build with 5 threads' '5C:build with 5 threads per CPU core'
'6:build with 6 threads' '6C:build with 6 threads per CPU core'
'7:build with 7 threads' '7C:build with 7 threads per CPU core'
'8:build with 8 threads' '8C:build with 8 threads per CPU core'
)
_describe -t thread-counts 'thread count' thread_counts
}
(( $+functions[_mvn_reactors] )) ||
_mvn_reactors() {
_message -e reactors 'reactor' # FIXME No idea what kind of value the "--reactor" option is supposed to take
}
(( $+functions[_mvn_passwords] )) ||
_mvn_passwords() {
_message -e passwords 'password'
}
(( $+functions[_mvn_pom_files] )) ||
_mvn_pom_files() {
_files -g '*pom*\.xml*'
}
(( $+functions[_mvn_toolchains_files] )) ||
_mvn_toolchains_files() {
_files -g '*toolchains*\.xml*'
}
(( $+functions[_mvn_settings_files] )) ||
_mvn_settings_files() {
_files -g '*settings*\.xml*'
}
(( $+functions[_mvn_log_files] )) ||
_mvn_log_files() {
_files
}
(( $+functions[_mvn_booleans] )) ||
_mvn_booleans() {
local booleans; booleans=(
'true:"true" boolean value'
'false:"false" boolean value'
)
_describe -t booleans 'boolean' booleans
}
# ------------------------------------------------------------------------------
# Helper functions
# ------------------------------------------------------------------------------
__mvn_get_pom_file() {
print ${~opt_args[-f]:-${opt_args[--file]:-pom.xml}}
}
__mvn_get_parent_pom_file() {
local pom_file=$(__mvn_get_pom_file)
while [[ -f ${pom_file:a:h:h}/pom.xml ]]; do
pom_file=${pom_file:a:h:h}/pom.xml;
done
print $pom_file
}
__mvn_get_settings_file() {
print ${~opt_args[-s]:-${opt_args[--settings]:-$HOME/.m2/settings.xml}}
}
__mvn_get_repository_location() {
print ${${${${(M)"$(<$(__mvn_get_settings_file))":#*<localRepository>*}:-$HOME/.m2/repository}##*<localRepository>}%%<\/localRepository>*}
}
__mvn_get_plugin_prefix() {
print ${${${${@#*.*:}%%:*}%-plugin}/-#maven-#}
}
__mvn_get_cache_dir() {
local cache_dir
zstyle -s ":completion:${curcontext}:" cache-path cache_dir
print ${cache_dir:-${ZDOTDIR:-$HOME}/.zcompcache}
}
# ------------------------------------------------------------------------------
# Caching policies
# ------------------------------------------------------------------------------
(( $+functions[_mvn_goals_caching_policy] )) ||
_mvn_goals_caching_policy() {
# Rebuild if cache is older than one month.
local -a oldp
oldp=( "$1"(NmM+1) )
(( $#oldp ))
}
(( $+functions[_mvn_properties_caching_policy] )) ||
_mvn_properties_caching_policy() {
_mvn_goals_caching_policy
}
(( $+functions[_mvn_groupIds_caching_policy] )) ||
_mvn_groupIds_caching_policy() {
_mvn_goals_caching_policy
}
(( $+functions[_mvn_profiles_caching_policy] )) ||
_mvn_profiles_caching_policy() {
# Rebuild if cached file more recent than cache.
local cached_file="${1#$(__mvn_get_cache_dir)}"
[[ -f $cached_file && $cached_file -nt "$1" ]] && return 0
# Rebuild if cache is older than one week.
local -a oldp
oldp=( "$1"(Nmw+1) )
(( $#oldp )) && return 0
return 1
}
_mvn "$@"

View file

@ -77,7 +77,7 @@ function quick-look() {
}
function man-preview() {
man -t "$@" | open -f -a Preview
man -t dvi "$@" | open -f -a Preview
}
function trash() {

204
plugins/psql/_psql Normal file
View file

@ -0,0 +1,204 @@
#compdef psql pg_dump createdb dropdb
#
# zsh completion functions for PostgreSQL client programs. Based on
# _mysql_utils.
#
# Dominic Mitchell <dom+zsh@xxxxxxxxxxxxxxxx>
#
_pgsql_common_opts=(
{-\?,--help}'[display help]'
# XXX This can also complete the path to a directory which
# contains the postgresql socket (eg: /tmp). I'm not sure how
# to say that though.
{-h+,--host=}':database host:_hosts'
# Postgres doesn't like service names here, which is why we
# don't use _ports.
{-p+,--port=}':database port number:'
{-U+,--username=}':connect as user:_pgsql_users'
{-W,--password}'[prompt for password]'
)
# Taken from
# <http://www.postgresql.org/docs/7.4/static/multibyte.html#CHARSET-TABLE>.
# It'd be real nice if postgres could tell us these...
_pgsql_encodings=(
SQL_ASCII
EUC_{JP,CN,KR,TW}
JOHAB
UNICODE
MULE_INTERNAL
LATIN{1,2,3,4,5,6,7,8,9,10}
ISO_8859_{5,6,7,8}
KOI8
WIN
ALT
WIN1256
TCVN
WIN874
)
_pgsql_get_identity () {
_pgsql_user=${(v)opt_args[(i)-U|--username]}
_pgsql_port=${(v)opt_args[(i)-p|--port]}
_pgsql_host=${(v)opt_args[(i)-h|--host]}
_pgsql_params=(
${_pgsql_user:+"--username=$_pgsql_user"}
${_pgsql_port:+"--port=$_pgsql_port"}
${_pgsql_host:+"--host=$_pgsql_host"}
)
}
_pgsql_users () {
local _pgsql_user _pgsql_port _pgsql_host _pgsql_params
_pgsql_get_identity
# We use _pgsql_port and _pgsql_host directly here instead of
# _pgsql_params so as to not pick up a partially completed
# username.
_pgsql_params=(
${_pgsql_port:+"--port=$_pgsql_port"}
${_pgsql_host:+"--host=$_pgsql_host"}
)
compadd "$@" - ${${(f)~~"$( psql $_pgsql_params[@] -At -c '\du' template1 )"}[@]%%|*}
}
_pgsql_tables () {
local _pgsql_user _pgsql_port _pgsql_host _pgsql_params
_pgsql_get_identity
# Need to pull out the database name from the existing arguments.
# This is going to vary between commands. Thankfully, it's only
# used by pg_dump, which always has the dbname in arg1. If it's
# not present it defaults to ${PGDATABASE:-$LOGNAME}, which
# matches (I think) the PostgreSQL behaviour.
local db
db=${line[1]:-${PGDATABASE:-$LOGNAME}}
# XXX In postgres 7.3 and above, the schema name is in the first
# column. I'm not sure how best to work around that... It really
# needs to be prepended with a "." to the table name.
# Many thanks to Oliver Kiddle for pointing out how to get the 2nd
# column out of this...
compadd "$@" - \
${${${(f)~~"$( psql $_pgsql_params[@] -At -c '\dt' $db )"}#*|}%%|*}
}
_pgsql_databases () {
local _pgsql_user _pgsql_port _pgsql_host _pgsql_params
_pgsql_get_identity
# Should I grep out template0?
compadd "$@" - ${${(f)~~"$( psql $_pgsql_params[@] -At -l)"}[@]%%|*}
}
##
## The actual completion code for the commands
##
_psql () {
local curcontext="$curcontext" state line expl
typeset -A opt_args
_arguments -C -s \
"$_pgsql_common_opts[@]" \
{-V,--version}'[display client version]' \
{-a,--echo-all}'[print commands read]' \
{-A,--no-align}'[unaligned output mode]' \
{-c+,--command=}':execute SQL command:' \
{-d+,--dbname=}':database to connect to:_pgsql_databases' \
{-e,--echo-queries}'[display queries submitted]' \
{-E,--echo-hidden}'[display hidden queries]' \
{-f+,--file=}':SQL file to read:_files' \
{-F+,--field-separator=}':field separator char:' \
{-H,--html}'[HTML output]' \
{-l,--list}'[list databases]' \
{-o+,--output=}':query output:_files' \
{-P+,--pset=}':set psql variable:' \
{-q,--quiet}'[non verbose mode]' \
{-R+,--record-separator=}':record separator char:' \
{-s,--single-step}'[prompt before each query]' \
{-S,--single-line}'[newline sends query]' \
{-t,--tuples-only}'[dont display header/footer]' \
{-T+,--table-attr=}':HTML table options:' \
-u'[prompt for username/password]' \
{-v+,--set=,--variable=}':set SQL variable:' \
{-x,--expanded}'[one column per line]' \
{-X,--no-psqlrc}'[dont read ~/.psqlrc]' \
':PostgreSQL database:_pgsql_databases' \
':PostgreSQL user:_pgsql_users'
}
_pg_dump () {
local curcontext="$curcontext" state line expl
typeset -A opt_args
_arguments -C -s \
"$_pgsql_common_opts[@]" \
{-a,--data-only}'[dump only data]' \
{-b,--blobs}'[dump blobs as well]' \
{-c,--clean}'[include clean cmds in dump]' \
{-C,--create}'[include createdb cmds in dump]' \
{-d,--inserts}'[use INSERT not COPY]' \
{-D,--{attribute,column}-inserts}'[use INSERT (cols) not COPY]' \
{-f+,--file=}':output file:_files' \
{-F+,--format=}':output format:_values "format" "p[plain text]" "t[tar]" "c[custom]"' \
{-i,--ignore-version}'[ignore version mismatch]' \
{-n+,--schema=}':schema to dump:' \
{-o,--oids}'[dump objects identifiers for every table]' \
{-O,--no-owner}'[dont recreate as same owner]' \
{-R,--no-reconnect}'[dont output connect]' \
{-s,--schema-only}'[no data, only schema]' \
{-S+,--superuser=}':superuser name:_pgsql_users' \
{-t+,--table=}':table to dump:_pgsql_tables' \
{-v,--verbose}'[verbose mode]' \
{-V,--version}'[display client version]' \
{-x,--no-{acl,privileges}}'[dont dump ACLs]' \
-X+':option:_values "option" use-set-session-authorization disable-triggers' \
{-Z+,--compress=}':compression level:_values "level" 9 8 7 6 5 4 3 2 1 0' \
':PostgreSQL database:_pgsql_databases'
}
_createdb () {
local curcontext="$curcontext" state line expl
typeset -A opt_args
_arguments -C -s \
"$_pgsql_common_opts[@]" \
{-e,--echo}'[display SQL queries]' \
{-q,--quiet}'[non verbose mode]' \
{-D+,--location=}':database location:_directories' \
{-T+,--template=}':database template:_pgsql_databases' \
{-E+,--encoding=}':database encoding:_values "encoding" $_pgsql_encodings[@]' \
':PostgreSQL database:' \
':comment:'
}
_dropdb () {
local curcontext="$curcontext" state line expl
typeset -A opt_args
_arguments -C -s \
"$_pgsql_common_opts[@]" \
{-e,--echo}'[display SQL queries]' \
{-q,--quiet}'[non verbose mode]' \
{-i,--interactive}'[confirm before drop]' \
':PostgreSQL database:_pgsql_databases'
}
_pgsql-utils () {
case "$service" in
psql) _psql "$@" ;;
pg_dump) _pg_dump "$@" ;;
createdb) _createdb "$@" ;;
dropdb) _dropdb "$@" ;;
esac
}
_pgsql-utils "$@"
# vim: set ai et sw=4 syntax=zsh :

@ -0,0 +1 @@
Subproject commit bb0d575942760fe483790fe878ea43b1f781e2ca