Commit 18ef1ee6 authored by Dawid Ferenczy's avatar Dawid Ferenczy
Browse files

Merge remote-tracking branch 'robbyrussell/master'

parents eafd5f32 192de6bc
## Rationale ##
> Searches for your Frontend contents more easier
## Instalation ##
Open your `.zshrc` file and load `frontend-search` plugin
```bash
...
plugins=( <your-plugins-list>... frontend-search)
...
```
## Commands ##
All command searches are accept only in format
* `frontend <search-content> <search-term>`
The search content are
* `jquery <api.jquery.com>`
* `mdn <developer.mozilla.org>`
* `compass <compass-style.org>`
* `html5please <html5please.com>`
* `caniuse <caniuse.com>`
* `aurajs <aurajs.com>`
* `dartlang <api.dartlang.org/apidocs/channels/stable/dartdoc-viewer>`
* `lodash <search>`
* `qunit <api.qunitjs.com>`
* `fontello <fontello.com>`
* `bootsnipp <bootsnipp.com>`
* `cssflow <cssflow.com>`
* `codepen <codepen.io>`
* `unheap <www.unheap.com>`
* `bem <google.com/search?as_q=<search-term>&as_sitesearch=bem.info>`
* `smacss <google.com/search?as_q=<search-term>&as_sitesearch=smacss.com>`
* `angularjs <google.com/search?as_q=<search-term>&as_sitesearch=angularjs.org>`
* `reactjs <google.com/search?as_q=<search-term>&as_sitesearch=facebook.github.io/react>`
* `emberjs <emberjs.com>`
* `stackoverflow <stackoverflow.com>`
## Aliases ##
There are a few aliases presented as well:
* `jquery` A shorthand for `frontend jquery`
* `mdn` A shorthand for `frontend mdn`
* `compass` A shorthand for `frontend compass`
* `html5please` A shorthand for `frontend html5please`
* `caniuse` A shorthand for `frontend caniuse`
* `aurajs` A shorthand for `frontend aurajs`
* `dartlang` A shorthand for `frontend dartlang`
* `lodash` A shorthand for `frontend lodash`
* `qunit` A shorthand for `frontend qunit`
* `fontello` A shorthand for `frontend fontello`
* `bootsnipp` A shorthand for `frontend bootsnipp`
* `cssflow` A shorthand for `frontend cssflow`
* `codepen` A shorthand for `frontend codepen`
* `unheap` A shorthand for `frontend unheap`
* `bem` A shorthand for `frontend bem`
* `smacss` A shorthand for `frontend smacss`
* `angularjs` A shorthand for `frontend angularjs`
* `reactjs` A shorthand for `frontend reactjs`
* `emberjs` A shorthand for `frontend emberjs`
* `stackoverflow` A shorthand for `frontend stackoverflow`
## Author
**Wilson Mendes (willmendesneto)**
+ <https://plus.google.com/+WilsonMendes>
+ <https://twitter.com/willmendesneto>
+ <http://github.com/willmendesneto>
New features comming soon.
#compdef frontend
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion::complete:frontend:*:commands' group-name commands
zstyle ':completion::complete:frontend:*:frontend_points' group-name frontend_points
zstyle ':completion::complete:frontend::' list-grouped
zmodload zsh/mapfile
function _frontend() {
local CONFIG=$HOME/.frontend-search
local ret=1
local -a commands
local -a frontend_points
frontend_points=( "${(f)mapfile[$CONFIG]//$HOME/~}" )
commands=(
'jquery: Search in jQuery website'
'mdn: Search in MDN website'
'compass: Search in COMPASS website'
'html5please: Search in HTML5 Please website'
'caniuse: Search in Can I Use website'
'aurajs: Search in AuraJs website'
'dartlang: Search in Dart website'
'lodash: Search in Lo-Dash website'
'qunit: Search in Qunit website'
'fontello: Search in fontello website'
'bootsnipp: Search in bootsnipp website'
'cssflow: Search in cssflow website'
'codepen: Search in codepen website'
'unheap: Search in unheap website'
'bem: Search in BEM website'
'smacss: Search in SMACSS website'
'angularjs: Search in Angular website'
'reactjs: Search in React website'
'emberjs: Search in Ember website'
'stackoverflow: Search in StackOverflow website'
)
_arguments -C \
'1: :->first_arg' \
'2: :->second_arg' && ret=0
case $state in
first_arg)
_describe -t frontend_points "Warp points" frontend_points && ret=0
_describe -t commands "Commands" commands && ret=0
;;
second_arg)
case $words[2] in
jquery)
_describe -t points "Warp points" frontend_points && ret=0
;;
mdn)
_describe -t points "Warp points" frontend_points && ret=0
;;
compass)
_describe -t points "Warp points" frontend_points && ret=0
;;
html5please)
_describe -t points "Warp points" frontend_points && ret=0
;;
caniuse)
_describe -t points "Warp points" frontend_points && ret=0
;;
aurajs)
_describe -t points "Warp points" frontend_points && ret=0
;;
dartlang)
_describe -t points "Warp points" frontend_points && ret=0
;;
lodash)
_describe -t points "Warp points" frontend_points && ret=0
;;
qunit)
_describe -t points "Warp points" frontend_points && ret=0
;;
fontello)
_describe -t points "Warp points" frontend_points && ret=0
;;
bootsnipp)
_describe -t points "Warp points" frontend_points && ret=0
;;
cssflow)
_describe -t points "Warp points" frontend_points && ret=0
;;
codepen)
_describe -t points "Warp points" frontend_points && ret=0
;;
unheap)
_describe -t points "Warp points" frontend_points && ret=0
;;
bem)
_describe -t points "Warp points" frontend_points && ret=0
;;
smacss)
_describe -t points "Warp points" frontend_points && ret=0
;;
angularjs)
_describe -t points "Warp points" frontend_points && ret=0
;;
reactjs)
_describe -t points "Warp points" frontend_points && ret=0
;;
emberjs)
_describe -t points "Warp points" frontend_points && ret=0
;;
stackoverflow)
_describe -t points "Warp points" frontend_points && ret=0
;;
esac
;;
esac
return $ret
}
_frontend "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et
# frontend from terminal
function frontend() {
# no keyword provided, simply show how call methods
if [[ $# -le 1 ]]; then
echo "Please provide a search-content and a search-term for app.\nEx:\nfrontend <search-content> <search-term>\n"
return 1
fi
# check whether the search engine is supported
if [[ ! $1 =~ '(jquery|mdn|compass|html5please|caniuse|aurajs|dartlang|qunit|fontello|bootsnipp|cssflow|codepen|unheap|bem|smacss|angularjs|reactjs|emberjs|stackoverflow)' ]];
then
echo "Search valid search content $1 not supported."
echo "Valid contents: (formats 'frontend <search-content>' or '<search-content>')"
echo "* jquery"
echo "* mdn"
echo "* compass"
echo "* html5please"
echo "* caniuse"
echo "* aurajs"
echo "* dartlang"
echo "* lodash"
echo "* qunit"
echo "* fontello"
echo "* bootsnipp"
echo "* cssflow"
echo "* codepen"
echo "* unheap"
echo "* bem"
echo "* smacss"
echo "* angularjs"
echo "* reactjs"
echo "* emberjs"
echo "* stackoverflow"
echo ""
return 1
fi
local url="http://"
local query=""
case "$1" in
"jquery")
url="${url}api.jquery.com"
url="${url}/?s=$2" ;;
"mdn")
url="${url}developer.mozilla.org"
url="${url}/search?q=$2" ;;
"compass")
url="${url}compass-style.org"
url="${url}/search?q=$2" ;;
"html5please")
url="${url}html5please.com"
url="${url}/#$2" ;;
"caniuse")
url="${url}caniuse.com"
url="${url}/#search=$2" ;;
"aurajs")
url="${url}aurajs.com"
url="${url}/api/#stq=$2" ;;
"dartlang")
url="${url}api.dartlang.org/apidocs/channels/stable/dartdoc-viewer"
url="${url}/dart-$2" ;;
"qunit")
url="${url}api.qunitjs.com"
url="${url}/?s=$2" ;;
"fontello")
url="${url}fontello.com"
url="${url}/#search=$2" ;;
"bootsnipp")
url="${url}bootsnipp.com"
url="${url}/search?q=$2" ;;
"cssflow")
url="${url}cssflow.com"
url="${url}/search?q=$2" ;;
"codepen")
url="${url}codepen.io"
url="${url}/search?q=$2" ;;
"unheap")
url="${url}www.unheap.com"
url="${url}/?s=$2" ;;
"bem")
url="${url}google.com"
url="${url}/search?as_q=$2&as_sitesearch=bem.info" ;;
"smacss")
url="${url}google.com"
url="${url}/search?as_q=$2&as_sitesearch=smacss.com" ;;
"angularjs")
url="${url}google.com"
url="${url}/search?as_q=$2&as_sitesearch=angularjs.org" ;;
"reactjs")
url="${url}google.com"
url="${url}/search?as_q=$2&as_sitesearch=facebook.github.io/react" ;;
"emberjs")
url="${url}emberjs.com"
url="${url}/api/#stq=$2&stp=1" ;;
"stackoverflow")
url="${url}stackoverflow.com"
url="${url}/search?q=$2" ;;
*) echo "INVALID PARAM!"
return ;;
esac
echo "$url"
open_command "$url"
}
# javascript
alias jquery='frontend jquery'
alias mdn='frontend mdn'
# pre processors frameworks
alias compassdoc='frontend compass'
# important links
alias html5please='frontend html5please'
alias caniuse='frontend caniuse'
# components and libraries
alias aurajs='frontend aurajs'
alias dartlang='frontend dartlang'
alias lodash='frontend lodash'
#tests
alias qunit='frontend qunit'
#fonts
alias fontello='frontend fontello'
# snippets
alias bootsnipp='frontend bootsnipp'
alias cssflow='frontend cssflow'
alias codepen='frontend codepen'
alias unheap='frontend unheap'
# css architecture
alias bem='frontend bem'
alias smacss='frontend smacss'
# frameworks
alias angularjs='frontend angularjs'
alias reactjs='frontend reactjs'
alias emberjs='frontend emberjs'
# search websites
alias stackoverflow='frontend stackoverflow'
...@@ -59,6 +59,8 @@ case "$words[1]" in ...@@ -59,6 +59,8 @@ case "$words[1]" in
build) build)
_files -g "*.gemspec" _files -g "*.gemspec"
;; ;;
install)
_files ;;
list) list)
if [[ "$state" == forms ]]; then if [[ "$state" == forms ]]; then
_gem_installed _gem_installed
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# #
# To achieve git-flow completion nirvana: # To achieve git-flow completion nirvana:
# #
# 0. Update your zsh's git-completion module to the newest verion. # 0. Update your zsh's git-completion module to the newest version.
# From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD # From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD
# #
# 1. Install this file. Either: # 1. Install this file. Either:
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
# #
# source ~/.git-flow-completion.zsh # source ~/.git-flow-completion.zsh
# #
# c. Or, use this file as a oh-my-zsh plugin. # c. Or, use this file as an oh-my-zsh plugin.
# #
#Alias #Alias
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# #
# To achieve git-hubflow completion nirvana: # To achieve git-hubflow completion nirvana:
# #
# 0. Update your zsh's git-completion module to the newest verion. # 0. Update your zsh's git-completion module to the newest version.
# From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD # From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD
# #
# 1. Install this file. Either: # 1. Install this file. Either:
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
# #
# source ~/.git-hubflow-completion.zsh # source ~/.git-hubflow-completion.zsh
# #
# c. Or, use this file as a oh-my-zsh plugin. # c. Or, use this file as an oh-my-zsh plugin.
# #
_git-hf () _git-hf ()
......
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
# http://github.com/olivierverdier/zsh-git-prompt # http://github.com/olivierverdier/zsh-git-prompt
# #
export __GIT_PROMPT_DIR=$ZSH/plugins/git-prompt export __GIT_PROMPT_DIR=$ZSH/plugins/git-prompt
# Initialize colors.
autoload -U colors
colors
# Allow for functions in the prompt. # Allow for functions in the prompt.
setopt PROMPT_SUBST setopt PROMPT_SUBST
......
## git ## git
**Maintainer:** [Stibbons](https://github.com/Stibbons)
This plugin adds several git aliases and increase the completion function provided by zsh **Maintainer:** [@ncanceill](https://github.com/ncanceill)
This plugin adds many useful aliases and functions.
### Usage
See the [wiki](https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git) for a list of aliases and functions provided by the plugin.
#compdef git-branch
_git-branch ()
{
declare l c m d
l='--color --no-color -r -a --all -v --verbose --abbrev --no-abbrev'
c='-l -f --force -t --track --no-track --set-upstream --contains --merged --no-merged'
m='-m -M'
d='-d -D'
declare -a dependent_creation_args
if (( words[(I)-r] == 0 )); then
dependent_creation_args=(
"($l $m $d): :__git_branch_names"
"::start-point:__git_revisions")
fi
declare -a dependent_deletion_args
if (( words[(I)-d] || words[(I)-D] )); then
dependent_creation_args=
dependent_deletion_args=(
'-r[delete only remote-tracking branches]')
if (( words[(I)-r] )); then
dependent_deletion_args+='*: :__git_ignore_line_inside_arguments __git_remote_branch_names'
else
dependent_deletion_args+='*: :__git_ignore_line_inside_arguments __git_branch_names'
fi
fi
declare -a dependent_modification_args
if (( words[(I)-m] || words[(I)-M] )); then
dependent_creation_args=
dependent_modification_args=(
':old or new branch name:__git_branch_names'
'::new branch name:__git_branch_names')
fi
_arguments -w -S -s \
"($c $m $d --no-color :)--color=-[turn on branch coloring]:: :__git_color_whens" \
"($c $m $d : --color)--no-color[turn off branch coloring]" \
"($c $m -a --all)-r[list or delete only remote-tracking branches]" \
"($c $m $d : -r)"{-a,--all}"[list both remote-tracking branches and local branches]" \
"($c $m $d : -v --verbose)"{-v,--verbose}'[show SHA1 and commit subject line for each head]' \
"($c $m $d :)--abbrev=[set minimum SHA1 display-length]: :__git_guard_number length" \
"($c $m $d :)--no-abbrev[do not abbreviate sha1s]" \
"($l $m $d)-l[create the branch's reflog]" \
"($l $m $d -f --force)"{-f,--force}"[force the creation of a new branch]" \
"($l $m $d -t --track)"{-t,--track}"[set up configuration so that pull merges from the start point]" \
"($l $m $d)--no-track[override the branch.autosetupmerge configuration variable]" \
"($l $m $d)--set-upstream[set up configuration so that pull merges]" \
"($l $m $d)--contains=[only list branches which contain the specified commit]: :__git_committishs" \
"($l $m $d)--merged=[only list branches which are fully contained by HEAD]: :__git_committishs" \
"($l $m $d)--no-merged=[do not list branches which are fully contained by HEAD]: :__git_committishs" \
$dependent_creation_args \
"($l $c $d -M)-m[rename a branch and the corresponding reflog]" \
"($l $c $d -m)-M[rename a branch even if the new branch-name already exists]" \
$dependent_modification_args \
"($l $c $m -D)-d[delete a fully merged branch]" \
"($l $c $m -d)-D[delete a branch]" \
$dependent_deletion_args
}
(( $+functions[__git_ignore_line] )) ||
__git_ignore_line () {
declare -a ignored
ignored=()
((CURRENT > 1)) &&
ignored+=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH})
((CURRENT < $#line)) &&
ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH})
$* -F ignored
}
(( $+functions[__git_ignore_line_inside_arguments] )) ||
__git_ignore_line_inside_arguments () {
declare -a compadd_opts
zparseopts -D -E -a compadd_opts V: J: 1 2 n f X: M: P: S: r: R: q F:
__git_ignore_line $* $compadd_opts
}
#compdef git-remote
# NOTE: --track is undocumented.
# TODO: --track, -t, --master, and -m should take remote branches, I guess.
# NOTE: --master is undocumented.
# NOTE: --fetch is undocumented.
_git-remote () {
local curcontext=$curcontext state line
declare -A opt_args
_arguments -C \
':command:->command' \
'*::options:->options' && ret=0
case $state in
(command)
declare -a commands
commands=(
'add:add a new remote'
'show:show information about a given remote'
'prune:delete all stale tracking branches for a given remote'
'update:fetch updates for a set of remotes'
'rm:remove a remote from .git/config and all associated tracking branches'
'rename:rename a remote from .git/config and update all associated tracking branches'
'set-head:sets or deletes the default branch'
'set-branches:changes the list of branches tracked by the named remote.'
'set-url:changes URL remote points to.'
)
_describe -t commands 'sub-command' commands && ret=0
;;
(options)
case $line[1] in
(add)
_arguments \
'*'{--track,-t}'[track given branch instead of default glob refspec]:branch:__git_branch_names' \
'(--master -m)'{--master,-m}'[set the remote'\''s HEAD to point to given master branch]:branch:__git_branch_names' \
'(--fetch -f)'{--fetch,-f}'[run git-fetch on the new remote after it has been created]' \
':branch name:__git_remotes' \
':url:_urls' && ret=0
;;
(show)
_arguments \
'-n[do not contact the remote for a list of branches]' \
':remote:__git_remotes' && ret=0
;;
(prune)
_arguments \
'(--dry-run -n)'{-n,--dry-run}'[do not actually prune, only list what would be done]' \
':remote:__git_remotes' && ret=0
;;
(update)
__git_remote-groups && ret=0
;;
(rm)
__git_remotes && ret=0
;;
(rename)
__git_remotes && ret=0
;;
(set-url)
_arguments \
'*--push[manipulate push URLs]' \
'(--add)--add[add URL]' \
'(--delete)--delete[delete URLs]' \
':branch name:__git_remotes' \
':url:_urls' && ret=0
;;
esac
;;
esac
}
# Query/use custom command for `git`.
zstyle -s ":vcs_info:git:*:-all-" "command" _omz_git_git_cmd
: ${_omz_git_git_cmd:=git}
#
# Functions
#
# The current branch name
# Usage example: git pull origin $(current_branch)
# Using '--quiet' with 'symbolic-ref' will not cause a fatal error (128) if
# it's not a symbolic ref, but in a Git repo.
function current_branch() {
local ref
ref=$($_omz_git_git_cmd symbolic-ref --quiet HEAD 2> /dev/null)
local ret=$?
if [[ $ret != 0 ]]; then
[[ $ret == 128 ]] && return # no git repo.
ref=$($_omz_git_git_cmd rev-parse --short HEAD 2> /dev/null) || return
fi
echo ${ref#refs/heads/}
}
# The list of remotes
function current_repository() {
if ! $_omz_git_git_cmd rev-parse --is-inside-work-tree &> /dev/null; then
return
fi
echo $($_omz_git_git_cmd remote -v | cut -d':' -f 2)
}
# Pretty log messages
function _git_log_prettily(){
if ! [ -z $1 ]; then
git log --pretty=$1
fi
}
# Warn if the current branch is a WIP
function work_in_progress() {
if $(git log -n 1 2>/dev/null | grep -q -c "\-\-wip\-\-"); then
echo "WIP!!"
fi
}
#
# Aliases # Aliases
# (sorted alphabetically)
#
alias g='git' alias g='git'
compdef g=git
alias gst='git status' alias ga='git add'
compdef _git gst=git-status alias gaa='git add --all'
alias gd='git diff' alias gapa='git add --patch'
compdef _git gd=git-diff
alias gdc='git diff --cached' alias gb='git branch'
compdef _git gdc=git-diff alias gba='git branch -a'
alias gl='git pull' alias gbda='git branch --merged | command grep -vE "^(\*|\s*master\s*$)" | command xargs -n 1 git branch -d'
compdef _git gl=git-pull alias gbl='git blame -b -w'
alias gup='git pull --rebase' alias gbnm='git branch --no-merged'
compdef _git gup=git-fetch alias gbr='git branch --remote'
alias gp='git push' alias gbs='git bisect'
compdef _git gp=git-push alias gbsb='git bisect bad'
alias gd='git diff' alias gbsg='git bisect good'
gdv() { git diff -w "$@" | view - } alias gbsr='git bisect reset'
compdef _git gdv=git-diff alias gbss='git bisect start'
alias gc='git commit -v' alias gc='git commit -v'
compdef _git gc=git-commit
alias gc!='git commit -v --amend' alias gc!='git commit -v --amend'
compdef _git gc!=git-commit
alias gca='git commit -v -a' alias gca='git commit -v -a'
compdef _git gc=git-commit
alias gca!='git commit -v -a --amend' alias gca!='git commit -v -a --amend'
compdef _git gca!=git-commit alias gcan!='git commit -v -a -s --no-edit --amend'
alias gcb='git checkout -b'
alias gcf='git config --list'
alias gcl='git clone --recursive'
alias gclean='git reset --hard && git clean -dfx'
alias gcm='git checkout master'
alias gcmsg='git commit -m' alias gcmsg='git commit -m'
compdef _git gcmsg=git-commit
alias gco='git checkout' alias gco='git checkout'
compdef _git gco=git-checkout
alias gcm='git checkout master'
alias gr='git remote'
compdef _git gr=git-remote
alias grv='git remote -v'
compdef _git grv=git-remote
alias grmv='git remote rename'
compdef _git grmv=git-remote
alias grrm='git remote remove'
compdef _git grrm=git-remote
alias grset='git remote set-url'
compdef _git grset=git-remote
alias grup='git remote update'
compdef _git grset=git-remote
alias grbi='git rebase -i'
compdef _git grbi=git-rebase
alias grbc='git rebase --continue'
compdef _git grbc=git-rebase
alias grba='git rebase --abort'
compdef _git grba=git-rebase
alias gb='git branch'
compdef _git gb=git-branch
alias gba='git branch -a'
compdef _git gba=git-branch
alias gcount='git shortlog -sn' alias gcount='git shortlog -sn'
compdef gcount=git compdef gcount=git
alias gcl='git config --list'
alias gcp='git cherry-pick' alias gcp='git cherry-pick'
compdef _git gcp=git-cherry-pick alias gcs='git commit -S'
alias glg='git log --stat --max-count=10'
compdef _git glg=git-log
alias glgg='git log --graph --max-count=10'
compdef _git glgg=git-log
alias glgga='git log --graph --decorate --all'
compdef _git glgga=git-log
alias glo='git log --oneline --decorate --color'
compdef _git glo=git-log
alias glog='git log --oneline --decorate --color --graph'
compdef _git glog=git-log
alias gss='git status -s'
compdef _git gss=git-status
alias ga='git add'
compdef _git ga=git-add
alias gm='git merge'
compdef _git gm=git-merge
alias grh='git reset HEAD'
alias grhh='git reset HEAD --hard'
alias gclean='git reset --hard && git clean -dfx'
alias gwc='git whatchanged -p --abbrev-commit --pretty=medium'
#remove the gf alias alias gd='git diff'
#alias gf='git ls-files | grep' alias gdca='git diff --cached'
alias gdt='git diff-tree --no-commit-id --name-only -r'
gdv() { git diff -w "$@" | view - }
compdef _git gdv=git-diff
alias gdw='git diff --word-diff'
alias gpoat='git push origin --all && git push origin --tags' alias gf='git fetch'
alias gmt='git mergetool --no-prompt' alias gfa='git fetch --all --prune'
compdef _git gm=git-mergetool function gfg() { git ls-files | grep $@ }
compdef gfg=grep
alias gfo='git fetch origin'
alias gg='git gui citool' alias gg='git gui citool'
alias gga='git gui citool --amend' alias gga='git gui citool --amend'
alias gk='gitk --all --branches' ggf() {
[[ "$#" != 1 ]] && local b="$(current_branch)"
alias gsts='git stash show --text' git push --force origin "${b:=$1}"
alias gsta='git stash'
alias gstp='git stash pop'
alias gstd='git stash drop'
# Will cd into the top of the current repository
# or submodule.
alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
# Git and svn mix
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
compdef git-svn-dcommit-push=git
alias gsr='git svn rebase'
alias gsd='git svn dcommit'
#
# Will return the current branch name
# Usage example: git pull origin $(current_branch)
#
function current_branch() {
ref=$(git symbolic-ref HEAD 2> /dev/null) || \
ref=$(git rev-parse --short HEAD 2> /dev/null) || return
echo ${ref#refs/heads/}
} }
compdef _git ggf=git-checkout
function current_repository() { ggl() {
ref=$(git symbolic-ref HEAD 2> /dev/null) || \ if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
ref=$(git rev-parse --short HEAD 2> /dev/null) || return git pull origin "${*}"
echo $(git remote -v | cut -d':' -f 2) else
[[ "$#" == 0 ]] && local b="$(current_branch)"
git pull origin "${b:=$1}"
fi
} }
compdef _git ggl=git-checkout
# these aliases take advantage of the previous function
alias ggpull='git pull origin $(current_branch)' alias ggpull='git pull origin $(current_branch)'
compdef ggpull=git compdef _git ggpull=git-checkout
alias ggpur='git pull --rebase origin $(current_branch)' ggp() {
compdef ggpur=git if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git push origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(current_branch)"
git push origin "${b:=$1}"
fi
}
compdef _git ggp=git-checkout
alias ggpush='git push origin $(current_branch)' alias ggpush='git push origin $(current_branch)'
compdef ggpush=git compdef _git ggpush=git-checkout
alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)' ggpnp() {
compdef ggpnp=git if [[ "$#" == 0 ]]; then
ggl && ggp
# Pretty log messages else
function _git_log_prettily(){ ggl "${*}" && ggp "${*}"
if ! [ -z $1 ]; then fi
git log --pretty=$1
fi
} }
alias glp="_git_log_prettily" compdef _git ggpnp=git-checkout
compdef _git glp=git-log alias ggsup='git branch --set-upstream-to=origin/$(current_branch)'
ggu() {
# Work In Progress (wip) [[ "$#" != 1 ]] && local b="$(current_branch)"
# These features allow to pause a branch development and switch to another one (wip) git pull --rebase origin "${b:=$1}"
# When you want to go back to work, just unwip it
#
# This function return a warning if the current branch is a wip
function work_in_progress() {
if $(git log -n 1 2>/dev/null | grep -q -c "\-\-wip\-\-"); then
echo "WIP!!"
fi
} }
# these alias commit and uncomit wip branches compdef _git ggu=git-checkout
alias gwip='git add -A; git ls-files --deleted -z | xargs -r0 git rm; git commit -m "--wip--"' alias ggpur='ggu'
alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1' compdef _git ggpur=git-checkout
# these alias ignore changes to file
alias gignore='git update-index --assume-unchanged' alias gignore='git update-index --assume-unchanged'
alias gunignore='git update-index --no-assume-unchanged'
# list temporarily ignored files
alias gignored='git ls-files -v | grep "^[[:lower:]]"' alias gignored='git ls-files -v | grep "^[[:lower:]]"'
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
compdef git-svn-dcommit-push=git
alias gk='\gitk --all --branches'
compdef _git gk='gitk'
alias gke='\gitk --all $(git log -g --pretty=format:%h)'
compdef _git gke='gitk'
alias gl='git pull'
alias glg='git log --stat --color'
alias glgp='git log --stat --color -p'
alias glgg='git log --graph --color'
alias glgga='git log --graph --decorate --all'
alias glgm='git log --graph --max-count=10'
alias glo='git log --oneline --decorate --color'
alias glol="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
alias glola="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
alias glog='git log --oneline --decorate --color --graph'
alias glp="_git_log_prettily"
compdef _git glp=git-log
alias gm='git merge'
alias gmom='git merge origin/master'
alias gmt='git mergetool --no-prompt'
alias gmtvim='git mergetool --no-prompt --tool=vimdiff'
alias gmum='git merge upstream/master'
alias gp='git push'
alias gpd='git push --dry-run'
alias gpoat='git push origin --all && git push origin --tags'
compdef _git gpoat=git-push
alias gpu='git push upstream'
alias gpv='git push -v'
alias gr='git remote'
alias gra='git remote add'
alias grb='git rebase'
alias grba='git rebase --abort'
alias grbc='git rebase --continue'
alias grbi='git rebase -i'
alias grbm='git rebase master'
alias grbs='git rebase --skip'
alias grh='git reset HEAD'
alias grhh='git reset HEAD --hard'
alias grmv='git remote rename'
alias grrm='git remote remove'
alias grset='git remote set-url'
alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
alias gru='git reset --'
alias grup='git remote update'
alias grv='git remote -v'
alias gsb='git status -sb'
alias gsd='git svn dcommit'
alias gsi='git submodule init'
alias gsps='git show --pretty=short --show-signature'
alias gsr='git svn rebase'
alias gss='git status -s'
alias gst='git status'
alias gsta='git stash'
alias gstaa='git stash apply'
alias gstd='git stash drop'
alias gstl='git stash list'
alias gstp='git stash pop'
alias gsts='git stash show --text'
alias gsu='git submodule update'
alias gts='git tag -s'
alias gunignore='git update-index --no-assume-unchanged'
alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
alias gup='git pull --rebase'
alias gupv='git pull --rebase -v'
alias gvt='git verify-tag'
alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit -m "--wip--"'
...@@ -30,10 +30,10 @@ if [ -z "$script" ]; then ...@@ -30,10 +30,10 @@ if [ -z "$script" ]; then
local -a locations local -a locations
local e local e
locations=( locations=(
"$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
'/etc/bash_completion.d/git' # fedora, old debian '/etc/bash_completion.d/git' # fedora, old debian
'/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian '/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
'/usr/share/bash-completion/git' # gentoo '/usr/share/bash-completion/git' # gentoo
$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash
) )
for e in $locations; do for e in $locations; do
test -f $e && script="$e" && break test -f $e && script="$e" && break
...@@ -76,6 +76,14 @@ __gitcomp_nl () ...@@ -76,6 +76,14 @@ __gitcomp_nl ()
compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0 compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
} }
__gitcomp_nl_append ()
{
emulate -L zsh
local IFS=$'\n'
compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
}
__gitcomp_file () __gitcomp_file ()
{ {
emulate -L zsh emulate -L zsh
......
#!bash
#
# bash/zsh completion support for core Git. # bash/zsh completion support for core Git.
# #
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org> # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
...@@ -180,9 +178,9 @@ _get_comp_words_by_ref () ...@@ -180,9 +178,9 @@ _get_comp_words_by_ref ()
} }
fi fi
__gitcompadd () __gitcompappend ()
{ {
local i=0 local i=${#COMPREPLY[@]}
for x in $1; do for x in $1; do
if [[ "$x" == "$3"* ]]; then if [[ "$x" == "$3"* ]]; then
COMPREPLY[i++]="$2$x$4" COMPREPLY[i++]="$2$x$4"
...@@ -190,6 +188,12 @@ __gitcompadd () ...@@ -190,6 +188,12 @@ __gitcompadd ()
done done
} }
__gitcompadd ()
{
COMPREPLY=()
__gitcompappend "$@"
}
# Generates completion reply, appending a space to possible completion words, # Generates completion reply, appending a space to possible completion words,
# if necessary. # if necessary.
# It accepts 1 to 4 arguments: # It accepts 1 to 4 arguments:
...@@ -220,6 +224,14 @@ __gitcomp () ...@@ -220,6 +224,14 @@ __gitcomp ()
esac esac
} }
# Variation of __gitcomp_nl () that appends to the existing list of
# completion candidates, COMPREPLY.
__gitcomp_nl_append ()
{
local IFS=$'\n'
__gitcompappend "$1" "${2-}" "${3-$cur}" "${4- }"
}
# Generates completion reply from newline-separated possible completion words # Generates completion reply from newline-separated possible completion words
# by appending a space to all of them. # by appending a space to all of them.
# It accepts 1 to 4 arguments: # It accepts 1 to 4 arguments:
...@@ -231,8 +243,8 @@ __gitcomp () ...@@ -231,8 +243,8 @@ __gitcomp ()
# appended. # appended.
__gitcomp_nl () __gitcomp_nl ()
{ {
local IFS=$'\n' COMPREPLY=()
__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }" __gitcomp_nl_append "$@"
} }
# Generates completion reply with compgen from newline-separated possible # Generates completion reply with compgen from newline-separated possible
...@@ -673,7 +685,6 @@ __git_list_porcelain_commands () ...@@ -673,7 +685,6 @@ __git_list_porcelain_commands ()
index-pack) : plumbing;; index-pack) : plumbing;;
init-db) : deprecated;; init-db) : deprecated;;
local-fetch) : plumbing;; local-fetch) : plumbing;;
lost-found) : infrequent;;
ls-files) : plumbing;; ls-files) : plumbing;;
ls-remote) : plumbing;; ls-remote) : plumbing;;
ls-tree) : plumbing;; ls-tree) : plumbing;;
...@@ -687,14 +698,12 @@ __git_list_porcelain_commands () ...@@ -687,14 +698,12 @@ __git_list_porcelain_commands ()
pack-refs) : plumbing;; pack-refs) : plumbing;;
parse-remote) : plumbing;; parse-remote) : plumbing;;
patch-id) : plumbing;; patch-id) : plumbing;;
peek-remote) : plumbing;;
prune) : plumbing;; prune) : plumbing;;
prune-packed) : plumbing;; prune-packed) : plumbing;;
quiltimport) : import;; quiltimport) : import;;
read-tree) : plumbing;; read-tree) : plumbing;;
receive-pack) : plumbing;; receive-pack) : plumbing;;
remote-*) : transport;; remote-*) : transport;;
repo-config) : deprecated;;
rerere) : plumbing;; rerere) : plumbing;;
rev-list) : plumbing;; rev-list) : plumbing;;
rev-parse) : plumbing;; rev-parse) : plumbing;;
...@@ -707,7 +716,6 @@ __git_list_porcelain_commands () ...@@ -707,7 +716,6 @@ __git_list_porcelain_commands ()
ssh-*) : transport;; ssh-*) : transport;;
stripspace) : plumbing;; stripspace) : plumbing;;
symbolic-ref) : plumbing;; symbolic-ref) : plumbing;;
tar-tree) : deprecated;;
unpack-file) : plumbing;; unpack-file) : plumbing;;
unpack-objects) : plumbing;; unpack-objects) : plumbing;;
update-index) : plumbing;; update-index) : plumbing;;
...@@ -901,7 +909,7 @@ _git_add () ...@@ -901,7 +909,7 @@ _git_add ()
esac esac
# XXX should we check for --update and --all options ? # XXX should we check for --update and --all options ?
__git_complete_index_file "--others --modified" __git_complete_index_file "--others --modified --directory --no-empty-directory"
} }
_git_archive () _git_archive ()
...@@ -1063,7 +1071,7 @@ _git_clean () ...@@ -1063,7 +1071,7 @@ _git_clean ()
esac esac
# XXX should we check for -x option ? # XXX should we check for -x option ?
__git_complete_index_file "--others" __git_complete_index_file "--others --directory"
} }
_git_clone () _git_clone ()
...@@ -1188,7 +1196,7 @@ _git_diff () ...@@ -1188,7 +1196,7 @@ _git_diff ()
__git_complete_revlist_file __git_complete_revlist_file
} }
__git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff __git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
" "
...@@ -1491,6 +1499,12 @@ _git_mergetool () ...@@ -1491,6 +1499,12 @@ _git_mergetool ()
_git_merge_base () _git_merge_base ()
{ {
case "$cur" in
--*)
__gitcomp "--octopus --independent --is-ancestor --fork-point"
return
;;
esac
__gitcomp_nl "$(__git_refs)" __gitcomp_nl "$(__git_refs)"
} }
...@@ -1623,7 +1637,7 @@ _git_rebase () ...@@ -1623,7 +1637,7 @@ _git_rebase ()
--preserve-merges --stat --no-stat --preserve-merges --stat --no-stat
--committer-date-is-author-date --ignore-date --committer-date-is-author-date --ignore-date
--ignore-whitespace --whitespace= --ignore-whitespace --whitespace=
--autosquash --autosquash --fork-point --no-fork-point
" "
return return
...@@ -1833,6 +1847,7 @@ _git_config () ...@@ -1833,6 +1847,7 @@ _git_config ()
branch.*) branch.*)
local pfx="${cur%.*}." cur_="${cur#*.}" local pfx="${cur%.*}." cur_="${cur#*.}"
__gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "." __gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "."
__gitcomp_nl_append $'autosetupmerge\nautosetuprebase\n' "$pfx" "$cur_"
return return
;; ;;
guitool.*.*) guitool.*.*)
...@@ -1875,6 +1890,7 @@ _git_config () ...@@ -1875,6 +1890,7 @@ _git_config ()
remote.*) remote.*)
local pfx="${cur%.*}." cur_="${cur#*.}" local pfx="${cur%.*}." cur_="${cur#*.}"
__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "." __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
__gitcomp_nl_append "pushdefault" "$pfx" "$cur_"
return return
;; ;;
url.*.*) url.*.*)
...@@ -1997,6 +2013,7 @@ _git_config () ...@@ -1997,6 +2013,7 @@ _git_config ()
fetch.unpackLimit fetch.unpackLimit
format.attach format.attach
format.cc format.cc
format.coverLetter
format.headers format.headers
format.numbered format.numbered
format.pretty format.pretty
...@@ -2580,7 +2597,7 @@ if [[ -n ${ZSH_VERSION-} ]]; then ...@@ -2580,7 +2597,7 @@ if [[ -n ${ZSH_VERSION-} ]]; then
--*=*|*.) ;; --*=*|*.) ;;
*) c="$c " ;; *) c="$c " ;;
esac esac
array[$#array+1]="$c" array[${#array[@]}+1]="$c"
done done
compset -P '*[=:]' compset -P '*[=:]'
compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
......
...@@ -60,6 +60,7 @@ ...@@ -60,6 +60,7 @@
# of values: # of values:
# #
# verbose show number of commits ahead/behind (+/-) upstream # verbose show number of commits ahead/behind (+/-) upstream
# name if verbose, then also show the upstream abbrev name
# legacy don't use the '--count' option available in recent # legacy don't use the '--count' option available in recent
# versions of git-rev-list # versions of git-rev-list
# git always compare HEAD to @{upstream} # git always compare HEAD to @{upstream}
...@@ -84,13 +85,17 @@ ...@@ -84,13 +85,17 @@
# the colored output of "git status -sb" and are available only when # the colored output of "git status -sb" and are available only when
# using __git_ps1 for PROMPT_COMMAND or precmd. # using __git_ps1 for PROMPT_COMMAND or precmd.
# check whether printf supports -v
__git_printf_supports_v=
printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
# stores the divergence from upstream in $p # stores the divergence from upstream in $p
# used by GIT_PS1_SHOWUPSTREAM # used by GIT_PS1_SHOWUPSTREAM
__git_ps1_show_upstream () __git_ps1_show_upstream ()
{ {
local key value local key value
local svn_remote svn_url_pattern count n local svn_remote svn_url_pattern count n
local upstream=git legacy="" verbose="" local upstream=git legacy="" verbose="" name=""
svn_remote=() svn_remote=()
# get some config options from git-config # get some config options from git-config
...@@ -106,7 +111,7 @@ __git_ps1_show_upstream () ...@@ -106,7 +111,7 @@ __git_ps1_show_upstream ()
;; ;;
svn-remote.*.url) svn-remote.*.url)
svn_remote[$((${#svn_remote[@]} + 1))]="$value" svn_remote[$((${#svn_remote[@]} + 1))]="$value"
svn_url_pattern+="\\|$value" svn_url_pattern="$svn_url_pattern\\|$value"
upstream=svn+git # default upstream is SVN if available, else git upstream=svn+git # default upstream is SVN if available, else git
;; ;;
esac esac
...@@ -118,6 +123,7 @@ __git_ps1_show_upstream () ...@@ -118,6 +123,7 @@ __git_ps1_show_upstream ()
git|svn) upstream="$option" ;; git|svn) upstream="$option" ;;
verbose) verbose=1 ;; verbose) verbose=1 ;;
legacy) legacy=1 ;; legacy) legacy=1 ;;
name) name=1 ;;
esac esac
done done
...@@ -200,6 +206,9 @@ __git_ps1_show_upstream () ...@@ -200,6 +206,9 @@ __git_ps1_show_upstream ()
*) # diverged from upstream *) # diverged from upstream
p=" u+${count#* }-${count% *}" ;; p=" u+${count#* }-${count% *}" ;;
esac esac
if [[ -n "$count" && -n "$name" ]]; then
p="$p $(git rev-parse --abbrev-ref "$upstream" 2>/dev/null)"
fi
fi fi
} }
...@@ -250,6 +259,13 @@ __git_ps1_colorize_gitstring () ...@@ -250,6 +259,13 @@ __git_ps1_colorize_gitstring ()
r="$c_clear$r" r="$c_clear$r"
} }
eread ()
{
f="$1"
shift
test -r "$f" && read "$@" <"$f"
}
# __git_ps1 accepts 0 or 1 arguments (i.e., format string) # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
# when called from PS1 using command substitution # when called from PS1 using command substitution
# in this mode it prints text to add to bash PS1 prompt (includes branch name) # in this mode it prints text to add to bash PS1 prompt (includes branch name)
...@@ -312,9 +328,9 @@ __git_ps1 () ...@@ -312,9 +328,9 @@ __git_ps1 ()
local step="" local step=""
local total="" local total=""
if [ -d "$g/rebase-merge" ]; then if [ -d "$g/rebase-merge" ]; then
read b 2>/dev/null <"$g/rebase-merge/head-name" eread "$g/rebase-merge/head-name" b
read step 2>/dev/null <"$g/rebase-merge/msgnum" eread "$g/rebase-merge/msgnum" step
read total 2>/dev/null <"$g/rebase-merge/end" eread "$g/rebase-merge/end" total
if [ -f "$g/rebase-merge/interactive" ]; then if [ -f "$g/rebase-merge/interactive" ]; then
r="|REBASE-i" r="|REBASE-i"
else else
...@@ -322,10 +338,10 @@ __git_ps1 () ...@@ -322,10 +338,10 @@ __git_ps1 ()
fi fi
else else
if [ -d "$g/rebase-apply" ]; then if [ -d "$g/rebase-apply" ]; then
read step 2>/dev/null <"$g/rebase-apply/next" eread "$g/rebase-apply/next" step
read total 2>/dev/null <"$g/rebase-apply/last" eread "$g/rebase-apply/last" total
if [ -f "$g/rebase-apply/rebasing" ]; then if [ -f "$g/rebase-apply/rebasing" ]; then
read b 2>/dev/null <"$g/rebase-apply/head-name" eread "$g/rebase-apply/head-name" b
r="|REBASE" r="|REBASE"
elif [ -f "$g/rebase-apply/applying" ]; then elif [ -f "$g/rebase-apply/applying" ]; then
r="|AM" r="|AM"
...@@ -349,7 +365,7 @@ __git_ps1 () ...@@ -349,7 +365,7 @@ __git_ps1 ()
b="$(git symbolic-ref HEAD 2>/dev/null)" b="$(git symbolic-ref HEAD 2>/dev/null)"
else else
local head="" local head=""
if ! read head 2>/dev/null <"$g/HEAD"; then if ! eread "$g/HEAD" head; then
if [ $pcmode = yes ]; then if [ $pcmode = yes ]; then
PS1="$ps1pc_start$ps1pc_end" PS1="$ps1pc_start$ps1pc_end"
fi fi
...@@ -433,7 +449,7 @@ __git_ps1 () ...@@ -433,7 +449,7 @@ __git_ps1 ()
local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p" local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
if [ $pcmode = yes ]; then if [ $pcmode = yes ]; then
if [[ -n ${ZSH_VERSION-} ]]; then if [ "${__git_printf_supports_v-}" != yes ]; then
gitstring=$(printf -- "$printf_format" "$gitstring") gitstring=$(printf -- "$printf_format" "$gitstring")
else else
printf -v gitstring -- "$printf_format" "$gitstring" printf -v gitstring -- "$printf_format" "$gitstring"
......
...@@ -40,7 +40,7 @@ fi ...@@ -40,7 +40,7 @@ fi
# #
# Use this when creating a new repo from scratch. # Use this when creating a new repo from scratch.
empty_gh() { # [NAME_OF_REPO] empty_gh() { # [NAME_OF_REPO]
repo = $1 repo=$1
ghuser=$( git config github.user ) ghuser=$( git config github.user )
mkdir "$repo" mkdir "$repo"
......
function gi() { curl http://www.gitignore.io/api/$@ ;} function gi() { curl -sL https://www.gitignore.io/api/$@ ;}
_gitignireio_get_command_list() { _gitignoreio_get_command_list() {
curl -s http://www.gitignore.io/api/list | tr "," "\n" curl -sL https://www.gitignore.io/api/list | tr "," "\n"
} }
_gitignireio () { _gitignoreio () {
compset -P '*,' compset -P '*,'
compadd -S '' `_gitignireio_get_command_list` compadd -S '' `_gitignoreio_get_command_list`
} }
compdef _gitignireio gi compdef _gitignoreio gi
...@@ -23,6 +23,7 @@ __go_tool_complete() { ...@@ -23,6 +23,7 @@ __go_tool_complete() {
'env[print Go environment information]' 'env[print Go environment information]'
'fix[run go tool fix on packages]' 'fix[run go tool fix on packages]'
'fmt[run gofmt on package sources]' 'fmt[run gofmt on package sources]'
'generate[generate Go files by processing source]'
'get[download and install packages and dependencies]' 'get[download and install packages and dependencies]'
'help[display help]' 'help[display help]'
'install[compile and install packages and dependencies]' 'install[compile and install packages and dependencies]'
...@@ -158,3 +159,6 @@ __go_tool_complete() { ...@@ -158,3 +159,6 @@ __go_tool_complete() {
} }
compdef __go_tool_complete go compdef __go_tool_complete go
# aliases
alias gfa='go fmt . ./...'
...@@ -60,7 +60,7 @@ function in_gradle() { ...@@ -60,7 +60,7 @@ function in_gradle() {
############################################################################ ############################################################################
_gradle_does_task_list_need_generating () { _gradle_does_task_list_need_generating () {
[ ! -f .gradletasknamecache ] && return 0; [ ! -f .gradletasknamecache ] && return 0;
[ .gradletasknamecache -nt build.gradle ] && return 0; [ build.gradle -nt .gradletasknamecache ] && return 0;
return 1; return 1;
} }
...@@ -72,7 +72,7 @@ _gradle_tasks () { ...@@ -72,7 +72,7 @@ _gradle_tasks () {
if [ in_gradle ]; then if [ in_gradle ]; then
_gradle_arguments _gradle_arguments
if _gradle_does_task_list_need_generating; then if _gradle_does_task_list_need_generating; then
gradle tasks --all | grep "^[ ]*[a-zA-Z0-9]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache gradle tasks --all | grep "^[ ]*[a-zA-Z0-9:]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache
fi fi
compadd -X "==== Gradle Tasks ====" `cat .gradletasknamecache` compadd -X "==== Gradle Tasks ====" `cat .gradletasknamecache`
fi fi
...@@ -82,7 +82,7 @@ _gradlew_tasks () { ...@@ -82,7 +82,7 @@ _gradlew_tasks () {
if [ in_gradle ]; then if [ in_gradle ]; then
_gradle_arguments _gradle_arguments
if _gradle_does_task_list_need_generating; then if _gradle_does_task_list_need_generating; then
gradlew tasks --all | grep "^[ ]*[a-zA-Z0-9]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache gradlew tasks --all | grep "^[ ]*[a-zA-Z0-9:]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache
fi fi
compadd -X "==== Gradlew Tasks ====" `cat .gradletasknamecache` compadd -X "==== Gradlew Tasks ====" `cat .gradletasknamecache`
fi fi
......
File mode changed from 100755 to 100644
#compdef grunt
#autoload
# -----------------------------------------------------------------------------
# _grunt
#
# Completion script for grunt.
# - https://github.com/gruntjs/grunt
# - https://github.com/gruntjs/grunt-cli
#
# -----------------------------------------------------------------------------
#
# Version : 0.1.2
# Author : Yonchu <yuyuchu3333@gmail.com>
# License : MIT License
# Repository : https://github.com/yonchu/grunt-zsh-completion
# Last Change : 20 Aug 2014.
#
# Copyright (c) 2013 Yonchu.
#
# -----------------------------------------------------------------------------
# USAGE
# -----
#
# Enable caching:
#
# If you want to use the cache, set the followings in your .zshrc:
#
# zstyle ':completion:*' use-cache yes
#
#
# Settings:
#
# - Show grunt file path:
# zstyle ':completion::complete:grunt::options:' show_grunt_path yes
#
# - Cache expiration days (default: 7):
# zstyle ':completion::complete:grunt::options:' expire 1
#
# - Not update options cache if target gruntfile is changed.
# zstyle ':completion::complete:grunt::options:' no_update_options yes
#
# Note that if you change the zstyle settings,
# you should delete the cache file and restart zsh.
#
# $ rm ~/.zcompcache/grunt
# $ exec zsh
#
# -----------------------------------------------------------------------------
function __grunt() {
local curcontext="$curcontext" update_policy state
local show_grunt_path update_msg gruntfile opts tasks
# Setup cache-policy.
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
if [[ -z $update_policy ]]; then
zstyle ":completion:${curcontext}:" cache-policy __grunt_caching_policy
fi
# Check show_path option.
zstyle -b ":completion:${curcontext}:options:" show_grunt_path show_grunt_path
# Get current gruntfile.
gruntfile=$(__grunt_get_gruntfile)
# Initialize opts and tasks.
opts=()
tasks=()
# Add help options.
opts+=('(- 1 *)'{-h,--help}'[Display this help text.]')
## Complete without gruntfile.
if [[ ! -f $gruntfile ]]; then
_arguments "${opts[@]}"
return
fi
## Complete with gruntfile.
# Retrieve cache.
if ! __grunt_update_cache "$gruntfile"; then
update_msg=' (cache updated)'
fi
# Make optioins completion.
if [[ ${#__grunt_opts} -gt 0 ]]; then
opts+=("${__grunt_opts[@]}")
fi
# Complete arguments.
_arguments \
"${opts[@]}" \
'*: :->tasks' \
&& return
case $state in
tasks)
if [[ $show_grunt_path == 'yes' ]]; then
update_msg="$update_msg: ${${gruntfile/#$HOME/~}%/}"
fi
# Make tasks completion.
if [[ ${#__grunt_tasks} -gt 0 ]]; then
tasks+=("${__grunt_tasks[@]}")
_describe -t grunt-task "$verbose grunt task$update_msg" tasks || return 1
fi
;;
esac
return 0
}
# Cache policy:
# The cache file name: grunt
# The cache variable name: __grunt_version __grunt_gruntfile __grunt_opts __grunt_tasks
function __grunt_update_cache() {
# TODO
local version='0.1.2'
local is_updating=0
local gruntfile="$1"
local grunt_info no_update_options cache_path
# Check no_update_options option.
zstyle -b ":completion:${curcontext}:options:" no_update_options no_update_options
if ! ( (( $+__grunt_gruntfile )) \
&& (( $+__grunt_opts )) \
&& (( $+__grunt_tasks )) ) \
&& ! _retrieve_cache 'grunt'; then
is_updating=1
fi
if [[ $gruntfile != $__grunt_gruntfile ]]; then
# Except for --help options.
__grunt_gruntfile=$gruntfile
if [[ $no_update_options == 'yes' ]]; then
if [[ $PREFIX == ${PREFIX#-} ]]; then
# Not options completions.
is_updating=1
elif [[ ${#__grunt_opts} -lt 2 ]]; then
is_updating=1
else
unset __grunt_gruntfile
fi
else
is_updating=1
fi
else
if [[ $PREFIX != ${PREFIX#-} && ${#__grunt_opts} -gt 1 ]]; then
unset __grunt_gruntfile
fi
fi
if _cache_invalid 'grunt'; then
is_updating=1
fi
# Check _grunt version.
if [[ $__grunt_version != $version ]]; then
is_updating=1
fi
if [[ $is_updating -ne 0 ]]; then
# Update caceh.
__grunt_version=$version
__grunt_gruntfile=$gruntfile
is_updating=1
grunt_info=$(grunt --help --no-color --gruntfile "$__grunt_gruntfile" 2>/dev/null)
__grunt_opts=(${(f)"$(__grunt_get_opts "$grunt_info")"})
__grunt_tasks=(${(f)"$(__grunt_get_tasks "$grunt_info")"})
_store_cache 'grunt' __grunt_version __grunt_gruntfile __grunt_opts __grunt_tasks
fi
return $is_updating
}
function __grunt_get_tasks() {
echo -E "$1" \
| grep 'Available tasks' -A 100 \
| grep '^ ' \
| sed -e 's/^[[:blank:]]*//' -e 's/[[:blank:]]*$//' \
| sed -e 's/:/\\:/g' \
| sed -e 's/ /:/'
}
function __grunt_get_opts() {
local opt_hunk opt_sep opt_num line opt
opt_hunk=$(echo -E "$1" \
| grep 'Options$' -A 100 \
| sed '1 d' \
| sed -e 's/[[:blank:]]*$//' \
)
opt_sep=()
opt_hunk=(${(f)opt_hunk})
opt_num=0
for line in "$opt_hunk[@]"; do
opt=$(echo -E "$line" | sed -e 's/^[[:blank:]]*//')
if [[ $line == $opt ]]; then
break
fi
if [[ $opt != ${opt#-} ]]; then
# Start with -
(( opt_num++ ))
opt=$(echo -E "$opt" | sed 's/^\(\(--[^ ]*\)\(, \(-[^ ]*\)\)*\) */\2\\t\4\\\t/')
fi
opt_sep[$opt_num]=("${opt_sep[$opt_num]}${opt}")
done
for line in "$opt_sep[@]"; do
opt=(${(s:\t:)line})
if [[ ${opt[1]} == '--help' ]]; then
continue
fi
if [[ ${#opt} -eq 2 ]]; then
echo -E "(${opt[1]})${opt[1]}[${opt[2]}]"
else
echo -E "(${opt[1]},${opt[2]})${opt[1]}[${opt[3]}]"
echo -E "(${opt[1]},${opt[2]})${opt[2]}[${opt[3]}]"
fi
done
}
function __grunt_get_gruntfile() {
local gruntfile
local curpath="$PWD"
while [ "$curpath" ]; do
for gruntfile in "$curpath/"{G,g}runtfile.{js,coffee}; do
if [[ -e "$gruntfile" ]]; then
echo "$gruntfile"
return
fi
done
curpath=${curpath%/*}
done
return 1
}
function __grunt_caching_policy() {
# Returns status zero if the completions cache needs rebuilding.
# Rebuild if .agignore more recent than cache.
if [[ -f $__grunt_gruntfile && $__grunt_gruntfile -nt $1 ]]; then
# Invalid cache because gruntfile is old.
return 0
fi
local -a oldp
local expire
zstyle -s ":completion:${curcontext}:options:" expire expire || expire=7
# Rebuild if cache is more than $expire days.
oldp=( "$1"(Nm+$expire) )
(( $#oldp ))
}
compdef __grunt grunt
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment