Commit 96ff8614 authored by Andrew Janke's avatar Andrew Janke
Browse files

Merge branch 'master' into installer-cygwin-support-3

Conflicts:
	tools/install.sh
parents 502f08b5 76a26a2a
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
BUFFER="fg"
zle accept-line
else
zle push-input
zle clear-screen
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
...@@ -5,7 +5,7 @@ if [ $commands[fasd] ]; then # check if fasd is installed ...@@ -5,7 +5,7 @@ if [ $commands[fasd] ]; then # check if fasd is installed
fi fi
source "$fasd_cache" source "$fasd_cache"
unset fasd_cache unset fasd_cache
alias v='f -e vim' alias v='f -e vim'
alias o='a -e open' alias o='a -e open_command'
fi fi
# start fbterm automatically in /dev/tty* # start fbterm automatically in /dev/tty*
if [[ $(tty|grep -o '/dev/tty') = /dev/tty ]] ; then if (( ${+commands[fbterm]} )); then
fbterm if [[ "$TTY" = /dev/tty* ]] ; then
exit fbterm && exit
fi
fi fi
## Rationale ## ## Introduction ##
> Searches for your Frontend contents more easier > Searches for your frontend web development made easier
## Instalation ## ## Installation ##
Open your `~/.zshrc` file and enable the `frontend-search` plugin:
Open your `.zshrc` file and load `frontend-search` plugin ```zsh
plugins=( ... frontend-search)
```bash
...
plugins=( <your-plugins-list>... frontend-search)
...
``` ```
## Commands ## ## Usage ##
All command searches are accept only in format You can use the frontend-search plugin in these two forms:
* `frontend <search-content> <search-term>` * `frontend <context> <term> [more terms if you want]`
* `<context> <term> [more terms if you want]`
The search content are
For example, these two are equivalent:
* `jquery <api.jquery.com>`
* `mdn <developer.mozilla.org>` ```zsh
* `compass <compass-style.org>` $ frontend angularjs dependency injection
* `html5please <html5please.com>` $ angularjs dependency injection
* `caniuse <caniuse.com>` ```
* `aurajs <aurajs.com>`
* `dartlang <api.dartlang.org/apidocs/channels/stable/dartdoc-viewer>` Available search contexts are:
* `lodash <search>`
* `qunit <api.qunitjs.com>` | context | URL |
* `fontello <fontello.com>` |---------------|--------------------------------------------------------------------------|
* `bootsnipp <bootsnipp.com>` | angularjs | `https://google.com/search?as_sitesearch=angularjs.org&as_q=` |
* `cssflow <cssflow.com>` | aurajs | `http://aurajs.com/api/#stq=` |
* `codepen <codepen.io>` | bem | `https://google.com/search?as_sitesearch=bem.info&as_q=` |
* `unheap <www.unheap.com>` | bootsnipp | `http://bootsnipp.com/search?q=` |
* `bem <google.com/search?as_q=<search-term>&as_sitesearch=bem.info>` | caniuse | `http://caniuse.com/#search=` |
* `smacss <google.com/search?as_q=<search-term>&as_sitesearch=smacss.com>` | codepen | `http://codepen.io/search?q=` |
* `angularjs <google.com/search?as_q=<search-term>&as_sitesearch=angularjs.org>` | compass | `http://compass-style.org/search?q=` |
* `reactjs <google.com/search?as_q=<search-term>&as_sitesearch=facebook.github.io/react>` | cssflow | `http://www.cssflow.com/search?q=` |
* `emberjs <emberjs.com>` | dartlang | `https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:` |
* `stackoverflow <stackoverflow.com>` | emberjs | `http://emberjs.com/api/#stp=1&stq=` |
| fontello | `http://fontello.com/#search=` |
| html5please | `http://html5please.com/#` |
## Aliases ## | jquery | `https://api.jquery.com/?s=` |
| lodash | `https://devdocs.io/lodash/index#` |
There are a few aliases presented as well: | mdn | `https://developer.mozilla.org/search?q=` |
| npmjs | `https://www.npmjs.com/search?q=` |
* `jquery` A shorthand for `frontend jquery` | qunit | `https://api.qunitjs.com/?s=` |
* `mdn` A shorthand for `frontend mdn` | reactjs | `https://google.com/search?as_sitesearch=facebook.github.io/react&as_q=` |
* `compass` A shorthand for `frontend compass` | smacss | `https://google.com/search?as_sitesearch=smacss.com&as_q=` |
* `html5please` A shorthand for `frontend html5please` | stackoverflow | `http://stackoverflow.com/search?q=` |
* `caniuse` A shorthand for `frontend caniuse` | unheap | `http://www.unheap.com/?s=` |
* `aurajs` A shorthand for `frontend aurajs`
* `dartlang` A shorthand for `frontend dartlang` If you want to have another context, open an Issue and tell us!
* `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 ## Author
...@@ -77,5 +63,3 @@ There are a few aliases presented as well: ...@@ -77,5 +63,3 @@ There are a few aliases presented as well:
+ <https://plus.google.com/+WilsonMendes> + <https://plus.google.com/+WilsonMendes>
+ <https://twitter.com/willmendesneto> + <https://twitter.com/willmendesneto>
+ <http://github.com/willmendesneto> + <http://github.com/willmendesneto>
New features comming soon.
...@@ -37,6 +37,7 @@ function _frontend() { ...@@ -37,6 +37,7 @@ function _frontend() {
'reactjs: Search in React website' 'reactjs: Search in React website'
'emberjs: Search in Ember website' 'emberjs: Search in Ember website'
'stackoverflow: Search in StackOverflow website' 'stackoverflow: Search in StackOverflow website'
'npmjs: Search in NPMJS website'
) )
_arguments -C \ _arguments -C \
...@@ -110,6 +111,9 @@ function _frontend() { ...@@ -110,6 +111,9 @@ function _frontend() {
stackoverflow) stackoverflow)
_describe -t points "Warp points" frontend_points && ret=0 _describe -t points "Warp points" frontend_points && ret=0
;; ;;
npmjs)
_describe -t points "Warp points" frontend_points && ret=0
;;
esac esac
;; ;;
esac esac
......
# frontend from terminal alias angularjs='frontend angularjs'
alias aurajs='frontend aurajs'
alias bem='frontend bem'
alias bootsnipp='frontend bootsnipp'
alias caniuse='frontend caniuse'
alias codepen='frontend codepen'
alias compass='frontend compass'
alias cssflow='frontend cssflow'
alias dartlang='frontend dartlang'
alias emberjs='frontend emberjs'
alias fontello='frontend fontello'
alias html5please='frontend html5please'
alias jquery='frontend jquery'
alias lodash='frontend lodash'
alias mdn='frontend mdn'
alias npmjs='frontend npmjs'
alias qunit='frontend qunit'
alias reactjs='frontend reactjs'
alias smacss='frontend smacss'
alias stackoverflow='frontend stackoverflow'
alias unheap='frontend unheap'
function frontend() { function frontend() {
emulate -L zsh
# get the open command
local open_cmd # define search context URLS
if [[ $(uname -s) == 'Darwin' ]]; then typeset -A urls
open_cmd='open' urls=(
else angularjs 'https://google.com/search?as_sitesearch=angularjs.org&as_q='
open_cmd='xdg-open' aurajs 'http://aurajs.com/api/#stq='
fi bem 'https://google.com/search?as_sitesearch=bem.info&as_q='
bootsnipp 'http://bootsnipp.com/search?q='
# no keyword provided, simply show how call methods caniuse 'http://caniuse.com/#search='
if [[ $# -le 1 ]]; then codepen 'http://codepen.io/search?q='
echo "Please provide a search-content and a search-term for app.\nEx:\nfrontend <search-content> <search-term>\n" compass 'http://compass-style.org/search?q='
return 1 cssflow 'http://www.cssflow.com/search?q='
dartlang 'https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:'
emberjs 'http://emberjs.com/api/#stp=1&stq='
fontello 'http://fontello.com/#search='
html5please 'http://html5please.com/#'
jquery 'https://api.jquery.com/?s='
lodash 'https://devdocs.io/lodash/index#'
mdn 'https://developer.mozilla.org/search?q='
npmjs 'https://www.npmjs.com/search?q='
qunit 'https://api.qunitjs.com/?s='
reactjs 'https://google.com/search?as_sitesearch=facebook.github.io/react&as_q='
smacss 'https://google.com/search?as_sitesearch=smacss.com&as_q='
stackoverflow 'http://stackoverflow.com/search?q='
unheap 'http://www.unheap.com/?s='
)
# show help for command list
if [[ $# -lt 2 ]]
then
print -P "Usage: frontend %Ucontext%u %Uterm%u [...%Umore%u] (or just: %Ucontext%u %Uterm%u [...%Umore%u])"
print -P ""
print -P "%Uterm%u and what follows is what will be searched for in the %Ucontext%u website,"
print -P "and %Ucontext%u is one of the following:"
print -P ""
print -P " angularjs, aurajs, bem, bootsnipp, caniuse, codepen, compass, cssflow,"
print -P " dartlang, emberjs, fontello, html5please, jquery, lodash, mdn, npmjs,"
print -P " qunit, reactjs, smacss, stackoverflow, unheap"
print -P ""
print -P "For example: frontend npmjs mocha (or just: npmjs mocha)."
print -P ""
return 1
fi fi
# check whether the search engine is supported # check whether the search context is supported
if [[ ! $1 =~ '(jquery|mdn|compass|html5please|caniuse|aurajs|dartlang|qunit|fontello|bootsnipp|cssflow|codepen|unheap|bem|smacss|angularjs|reactjs|emberjs|stackoverflow)' ]]; if [[ -z "$urls[$1]" ]]
then then
echo "Search valid search content $1 not supported." echo "Search context \"$1\" currently not supported."
echo "Valid contents: (formats 'frontend <search-content>' or '<search-content>')" echo ""
echo "* jquery" echo "Valid contexts are:"
echo "* mdn" echo ""
echo "* compass" echo " angularjs, aurajs, bem, bootsnipp, caniuse, codepen, compass, cssflow, "
echo "* html5please" echo " dartlang, emberjs, fontello, html5please, jquery, lodash, mdn, npmjs, "
echo "* caniuse" echo " qunit, reactjs, smacss, stackoverflow, unheap"
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 "" echo ""
return 1 return 1
fi fi
local url="http://" # build search url:
local query="" # join arguments passed with '+', then append to search context URL
# TODO substitute for proper urlencode method
case "$1" in url="${urls[$1]}${(j:+:)@[2,-1]}"
"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_cmd "$url" echo "Opening $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'
...@@ -3,19 +3,20 @@ ...@@ -3,19 +3,20 @@
# Description # Description
# ----------- # -----------
# #
# Completion script for git-extras (http://github.com/visionmedia/git-extras). # Completion script for git-extras (http://github.com/tj/git-extras).
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Authors # Authors
# ------- # -------
# #
# * Alexis GRIMALDI (https://github.com/agrimaldi) # * Alexis GRIMALDI (https://github.com/agrimaldi)
# * spacewander (https://github.com/spacewander)
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Inspirations # Inspirations
# ----------- # -----------
# #
# * git-extras (http://github.com/visionmedia/git-extras) # * git-extras (http://github.com/tj/git-extras)
# * git-flow-completion (http://github.com/bobthecow/git-flow-completion) # * git-flow-completion (http://github.com/bobthecow/git-flow-completion)
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
...@@ -30,10 +31,21 @@ __git_command_successful () { ...@@ -30,10 +31,21 @@ __git_command_successful () {
} }
__git_commits() {
declare -A commits
git log --oneline -15 | sed 's/\([[:alnum:]]\{7\}\) /\1:/' | while read commit
do
hash=$(echo $commit | cut -d':' -f1)
commits[$hash]="$commit"
done
local ret=1
_describe -t commits commit commits && ret=0
}
__git_tag_names() { __git_tag_names() {
local expl local expl
declare -a tag_names declare -a tag_names
tag_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/}) tag_names=(${${(f)"$(_call_program tags git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/})
__git_command_successful || return __git_command_successful || return
_wanted tag-names expl tag-name compadd $* - $tag_names _wanted tag-names expl tag-name compadd $* - $tag_names
} }
...@@ -47,31 +59,27 @@ __git_branch_names() { ...@@ -47,31 +59,27 @@ __git_branch_names() {
_wanted branch-names expl branch-name compadd $* - $branch_names _wanted branch-names expl branch-name compadd $* - $branch_names
} }
__git_specific_branch_names() {
__git_feature_branch_names() {
local expl local expl
declare -a branch_names declare -a branch_names
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/feature 2>/dev/null)"}#refs/heads/feature/}) branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/"$1" 2>/dev/null)"}#refs/heads/$1/})
__git_command_successful || return __git_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names _wanted branch-names expl branch-name compadd $* - $branch_names
} }
__git_feature_branch_names() {
__git_specific_branch_names 'feature'
}
__git_refactor_branch_names() { __git_refactor_branch_names() {
local expl __git_specific_branch_names 'refactor'
declare -a branch_names
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/refactor 2>/dev/null)"}#refs/heads/refactor/})
__git_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names
} }
__git_bug_branch_names() { __git_bug_branch_names() {
local expl __git_specific_branch_names 'bug'
declare -a branch_names
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/bug 2>/dev/null)"}#refs/heads/bug/})
__git_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names
} }
...@@ -92,19 +100,43 @@ __git_author_names() { ...@@ -92,19 +100,43 @@ __git_author_names() {
_wanted author-names expl author-name compadd $* - $author_names _wanted author-names expl author-name compadd $* - $author_names
} }
# subcommands
_git-changelog() { _git-bug() {
_arguments \ local curcontext=$curcontext state line ret=1
'(-l --list)'{-l,--list}'[list commits]' \ declare -A opt_args
_arguments -C \
': :->command' \
'*:: :->option-or-argument' && ret=0
case $state in
(command)
declare -a commands
commands=(
'finish:merge bug into the current branch'
)
_describe -t commands command commands && ret=0
;;
(option-or-argument)
curcontext=${curcontext%:*}-$line[1]:
case $line[1] in
(finish)
_arguments -C \
':branch-name:__git_bug_branch_names'
;;
esac
esac
} }
_git-effort() { _git-changelog() {
_arguments \ _arguments \
'--above[ignore file with less than x commits]' \ '(-l --list)'{-l,--list}'[list commits]' \
} }
_git-contrib() { _git-contrib() {
_arguments \ _arguments \
':author:__git_author_names' ':author:__git_author_names'
...@@ -135,6 +167,11 @@ _git-delete-tag() { ...@@ -135,6 +167,11 @@ _git-delete-tag() {
} }
_git-effort() {
_arguments \
'--above[ignore file with less than x commits]'
}
_git-extras() { _git-extras() {
local curcontext=$curcontext state line ret=1 local curcontext=$curcontext state line ret=1
declare -A opt_args declare -A opt_args
...@@ -154,20 +191,7 @@ _git-extras() { ...@@ -154,20 +191,7 @@ _git-extras() {
esac esac
_arguments \ _arguments \
'(-v --version)'{-v,--version}'[show current version]' \ '(-v --version)'{-v,--version}'[show current version]'
}
_git-graft() {
_arguments \
':src-branch-name:__git_branch_names' \
':dest-branch-name:__git_branch_names'
}
_git-squash() {
_arguments \
':branch-name:__git_branch_names'
} }
...@@ -199,6 +223,25 @@ _git-feature() { ...@@ -199,6 +223,25 @@ _git-feature() {
} }
_git-graft() {
_arguments \
':src-branch-name:__git_branch_names' \
':dest-branch-name:__git_branch_names'
}
_git-ignore() {
_arguments -C \
'(--local -l)'{--local,-l}'[show local gitignore]' \
'(--global -g)'{--global,-g}'[show global gitignore]'
}
_git-missing() {
_arguments \
':first-branch-name:__git_branch_names' \
':second-branch-name:__git_branch_names'
}
_git-refactor() { _git-refactor() {
local curcontext=$curcontext state line ret=1 local curcontext=$curcontext state line ret=1
declare -A opt_args declare -A opt_args
...@@ -227,59 +270,62 @@ _git-refactor() { ...@@ -227,59 +270,62 @@ _git-refactor() {
} }
_git-bug() { _git-squash() {
local curcontext=$curcontext state line ret=1 _arguments \
declare -A opt_args ':branch-name:__git_branch_names'
}
_arguments -C \
': :->command' \
'*:: :->option-or-argument' && ret=0
case $state in _git-summary() {
(command) _arguments '--line[summarize with lines other than commits]'
declare -a commands __git_commits
commands=(
'finish:merge bug into the current branch'
)
_describe -t commands command commands && ret=0
;;
(option-or-argument)
curcontext=${curcontext%:*}-$line[1]:
case $line[1] in
(finish)
_arguments -C \
':branch-name:__git_bug_branch_names'
;;
esac
esac
} }
_git-undo(){
_arguments -C \
'(--soft -s)'{--soft,-s}'[only rolls back the commit but changes remain un-staged]' \
'(--hard -h)'{--hard,-h}'[wipes your commit(s)]'
}
zstyle ':completion:*:*:git:*' user-commands \ zstyle ':completion:*:*:git:*' user-commands \
alias:'define, search and show aliases' \
archive-file:'export the current HEAD of the git repository to a archive' \
back:'undo and stage latest commits' \
bug:'create a bug branch' \
changelog:'populate changelog file with commits since the previous tag' \ changelog:'populate changelog file with commits since the previous tag' \
commits-since:'list commits since a given date' \
contrib:'display author contributions' \ contrib:'display author contributions' \
count:'count commits' \ count:'count commits' \
create-branch:'create local and remote branch' \
delete-branch:'delete local and remote branch' \ delete-branch:'delete local and remote branch' \
delete-merged-brancees:'delete merged branches'\
delete-submodule:'delete submodule' \ delete-submodule:'delete submodule' \
delete-tag:'delete local and remote tag' \ delete-tag:'delete local and remote tag' \
effort:'display effort statistics' \
extras:'git-extras' \ extras:'git-extras' \
graft:'merge commits from source branch to destination branch' \
squash:'merge commits from source branch into the current one as a single commit' \
feature:'create a feature branch' \ feature:'create a feature branch' \
refactor:'create a refactor branch' \ fork:'fork a repo on github' \
bug:'create a bug branch' \ fresh-branch:'create empty local branch' \
summary:'repository summary' \ gh-pages:'create the GitHub Pages branch' \
effort:'display effort statistics' \ graft:'merge commits from source branch to destination branch' \
repl:'read-eval-print-loop' \
commits-since:'list commits since a given date' \
release:'release commit with the given tag' \
alias:'define, search and show aliases' \
ignore:'add patterns to .gitignore' \ ignore:'add patterns to .gitignore' \
info:'show info about the repository' \ info:'show info about the repository' \
create-branch:'create local and remote branch' \ local-commits:'list unpushed commits on the local branch' \
fresh-branch:'create empty local branch' \ lock:'lock a file excluded from version control' \
undo:'remove the latest commit' \ locked:'ls files that have been locked' \
missing:'show commits missing from another branch' \
pr:'checks out a pull request locally' \
rebase-patch:'rebases a patch' \
refactor:'create a refactor branch' \
release:'commit, tag and push changes to the repository' \
rename-tag:'rename a tag' \
repl:'read-eval-print-loop' \
reset-file:'reset one file' \
root:'show path of root' \
setup:'setup a git repository' \ setup:'setup a git repository' \
show-tree:'show branch tree of commit history' \
squash:'merge commits from source branch into the current one as a single commit' \
summary:'repository summary' \
touch:'one step creation of new files' \ touch:'one step creation of new files' \
obliterate:'Completely remove a file from the repository, including past commits and tags' \ undo:'remove the latest commit' \
local-commits:'list unpushed commits on the local branch' \ unlock:'unlock a file excluded from version control'
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
# #
#Alias #Alias
alias gf='git flow' alias gfl='git flow'
alias gcd='git checkout develop' alias gcd='git checkout develop'
alias gch='git checkout hotfix' alias gch='git checkout hotfix'
alias gcr='git checkout release' alias gcr='git checkout release'
......
# ZSH Git Prompt Plugin from: # ZSH Git Prompt Plugin from:
# http://github.com/olivierverdier/zsh-git-prompt # http://github.com/olivierverdier/zsh-git-prompt
#
export __GIT_PROMPT_DIR=$ZSH/plugins/git-prompt
# Allow for functions in the prompt. __GIT_PROMPT_DIR="${0:A:h}"
setopt PROMPT_SUBST
## Enable auto-execution of functions. ## Hook function definitions
typeset -ga preexec_functions function chpwd_update_git_vars() {
typeset -ga precmd_functions update_current_git_vars
typeset -ga chpwd_functions }
# Append git functions needed for prompt.
preexec_functions+='preexec_update_git_vars'
precmd_functions+='precmd_update_git_vars'
chpwd_functions+='chpwd_update_git_vars'
## Function definitions
function preexec_update_git_vars() { function preexec_update_git_vars() {
case "$2" in case "$2" in
git*) git*|hub*|gh*|stg*)
__EXECUTED_GIT_COMMAND=1 __EXECUTED_GIT_COMMAND=1
;; ;;
esac esac
} }
function precmd_update_git_vars() { function precmd_update_git_vars() {
if [ -n "$__EXECUTED_GIT_COMMAND" ]; then if [ -n "$__EXECUTED_GIT_COMMAND" ] || [ ! -n "$ZSH_THEME_GIT_PROMPT_CACHE" ]; then
update_current_git_vars update_current_git_vars
unset __EXECUTED_GIT_COMMAND unset __EXECUTED_GIT_COMMAND
fi fi
} }
function chpwd_update_git_vars() { chpwd_functions+=(chpwd_update_git_vars)
update_current_git_vars precmd_functions+=(precmd_update_git_vars)
} preexec_functions+=(preexec_update_git_vars)
## Function definitions
function update_current_git_vars() { function update_current_git_vars() {
unset __CURRENT_GIT_STATUS unset __CURRENT_GIT_STATUS
local gitstatus="$__GIT_PROMPT_DIR/gitstatus.py" local gitstatus="$__GIT_PROMPT_DIR/gitstatus.py"
_GIT_STATUS=`python ${gitstatus}` _GIT_STATUS=$(python ${gitstatus} 2>/dev/null)
__CURRENT_GIT_STATUS=("${(f)_GIT_STATUS}") __CURRENT_GIT_STATUS=("${(@s: :)_GIT_STATUS}")
GIT_BRANCH=$__CURRENT_GIT_STATUS[1]
GIT_AHEAD=$__CURRENT_GIT_STATUS[2]
GIT_BEHIND=$__CURRENT_GIT_STATUS[3]
GIT_STAGED=$__CURRENT_GIT_STATUS[4]
GIT_CONFLICTS=$__CURRENT_GIT_STATUS[5]
GIT_CHANGED=$__CURRENT_GIT_STATUS[6]
GIT_UNTRACKED=$__CURRENT_GIT_STATUS[7]
} }
function prompt_git_info() { git_super_status() {
precmd_update_git_vars
if [ -n "$__CURRENT_GIT_STATUS" ]; then if [ -n "$__CURRENT_GIT_STATUS" ]; then
echo "(%{${fg[red]}%}$__CURRENT_GIT_STATUS[1]%{${fg[default]}%}$__CURRENT_GIT_STATUS[2]%{${fg[magenta]}%}$__CURRENT_GIT_STATUS[3]%{${fg[default]}%})" STATUS="$ZSH_THEME_GIT_PROMPT_PREFIX$ZSH_THEME_GIT_PROMPT_BRANCH$GIT_BRANCH%{${reset_color}%}"
if [ "$GIT_BEHIND" -ne "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_BEHIND$GIT_BEHIND%{${reset_color}%}"
fi
if [ "$GIT_AHEAD" -ne "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_AHEAD$GIT_AHEAD%{${reset_color}%}"
fi
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_SEPARATOR"
if [ "$GIT_STAGED" -ne "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_STAGED$GIT_STAGED%{${reset_color}%}"
fi
if [ "$GIT_CONFLICTS" -ne "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CONFLICTS$GIT_CONFLICTS%{${reset_color}%}"
fi
if [ "$GIT_CHANGED" -ne "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CHANGED$GIT_CHANGED%{${reset_color}%}"
fi
if [ "$GIT_UNTRACKED" -ne "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED%{${reset_color}%}"
fi
if [ "$GIT_CHANGED" -eq "0" ] && [ "$GIT_CONFLICTS" -eq "0" ] && [ "$GIT_STAGED" -eq "0" ] && [ "$GIT_UNTRACKED" -eq "0" ]; then
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CLEAN"
fi
STATUS="$STATUS%{${reset_color}%}$ZSH_THEME_GIT_PROMPT_SUFFIX"
echo "$STATUS"
fi fi
} }
# Default values for the appearance of the prompt.
ZSH_THEME_GIT_PROMPT_PREFIX="("
ZSH_THEME_GIT_PROMPT_SUFFIX=")"
ZSH_THEME_GIT_PROMPT_SEPARATOR="|"
ZSH_THEME_GIT_PROMPT_BRANCH="%{$fg_bold[magenta]%}"
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[red]%}%{●%G%}"
ZSH_THEME_GIT_PROMPT_CONFLICTS="%{$fg[red]%}%{✖%G%}"
ZSH_THEME_GIT_PROMPT_CHANGED="%{$fg[blue]%}%{✚%G%}"
ZSH_THEME_GIT_PROMPT_BEHIND="%{↓%G%}"
ZSH_THEME_GIT_PROMPT_AHEAD="%{↑%G%}"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{…%G%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}%{✔%G%}"
# Set the prompt. # Set the prompt.
#PROMPT='%B%m%~%b$(prompt_git_info) %# ' RPROMPT='$(git_super_status)'
# for a right prompt:
#RPROMPT='%b$(prompt_git_info)'
RPROMPT='$(prompt_git_info)'
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: UTF-8 -*- from __future__ import print_function
from subprocess import Popen, PIPE
import re
# change those symbols to whatever you prefer import sys
symbols = { import re
'ahead of': '↑', import shlex
'behind': '↓', from subprocess import Popen, PIPE, check_output
'staged': '♦',
'changed': '‣',
'untracked': '…',
'clean': '⚡',
'unmerged': '≠',
'sha1': ':'
}
output, error = Popen(
['git', 'status'], stdout=PIPE, stderr=PIPE, universal_newlines=True).communicate()
if error: def get_tagname_or_hash():
import sys """return tagname if exists else hash"""
sys.exit(0) cmd = 'git log -1 --format="%h%d"'
lines = output.splitlines() output = check_output(shlex.split(cmd)).decode('utf-8').strip()
hash_, tagname = None, None
# get hash
m = re.search('\(.*\)$', output)
if m:
hash_ = output[:m.start()-1]
# get tagname
m = re.search('tag: .*[,\)]', output)
if m:
tagname = 'tags/' + output[m.start()+len('tag: '): m.end()-1]
behead_re = re.compile( if tagname:
r"^# Your branch is (ahead of|behind) '(.*)' by (\d+) commit") return tagname
diverge_re = re.compile(r"^# and have (\d+) and (\d+) different") elif hash_:
return hash_
return None
status = ''
staged = re.compile(r'^# Changes to be committed:$', re.MULTILINE)
changed = re.compile(r'^# Changed but not updated:$', re.MULTILINE)
untracked = re.compile(r'^# Untracked files:$', re.MULTILINE)
unmerged = re.compile(r'^# Unmerged paths:$', re.MULTILINE)
# `git status --porcelain --branch` can collect all information
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
po = Popen(['git', 'status', '--porcelain', '--branch'], stdout=PIPE, stderr=PIPE)
stdout, sterr = po.communicate()
if po.returncode != 0:
sys.exit(0) # Not a git repository
def execute(*command): # collect git status information
out, err = Popen(stdout=PIPE, stderr=PIPE, *command).communicate() untracked, staged, changed, conflicts = [], [], [], []
if not err: ahead, behind = 0, 0
nb = len(out.splitlines()) status = [(line[0], line[1], line[2:]) for line in stdout.decode('utf-8').splitlines()]
for st in status:
if st[0] == '#' and st[1] == '#':
if re.search('Initial commit on', st[2]):
branch = st[2].split(' ')[-1]
elif re.search('no branch', st[2]): # detached status
branch = get_tagname_or_hash()
elif len(st[2].strip().split('...')) == 1:
branch = st[2].strip()
else:
# current and remote branch info
branch, rest = st[2].strip().split('...')
if len(rest.split(' ')) == 1:
# remote_branch = rest.split(' ')[0]
pass
else:
# ahead or behind
divergence = ' '.join(rest.split(' ')[1:])
divergence = divergence.lstrip('[').rstrip(']')
for div in divergence.split(', '):
if 'ahead' in div:
ahead = int(div[len('ahead '):].strip())
elif 'behind' in div:
behind = int(div[len('behind '):].strip())
elif st[0] == '?' and st[1] == '?':
untracked.append(st)
else: else:
nb = '?' if st[1] == 'M':
return nb changed.append(st)
if st[0] == 'U':
if staged.search(output): conflicts.append(st)
nb = execute( elif st[0] != ' ':
['git', 'diff', '--staged', '--name-only', '--diff-filter=ACDMRT']) staged.append(st)
status += '%s%s' % (symbols['staged'], nb)
if unmerged.search(output):
nb = execute(['git', 'diff', '--staged', '--name-only', '--diff-filter=U'])
status += '%s%s' % (symbols['unmerged'], nb)
if changed.search(output):
nb = execute(['git', 'diff', '--name-only', '--diff-filter=ACDMRT'])
status += '%s%s' % (symbols['changed'], nb)
if untracked.search(output):
status += symbols['untracked']
if status == '':
status = symbols['clean']
remote = ''
bline = lines[0]
if bline.find('Not currently on any branch') != -1:
branch = symbols['sha1'] + Popen([
'git',
'rev-parse',
'--short',
'HEAD'], stdout=PIPE).communicate()[0][:-1]
else:
branch = bline.split(' ')[-1]
bstatusline = lines[1]
match = behead_re.match(bstatusline)
if match:
remote = symbols[match.groups()[0]]
remote += match.groups()[2]
elif lines[2:]:
div_match = diverge_re.match(lines[2])
if div_match:
remote = "{behind}{1}{ahead of}{0}".format(
*div_match.groups(), **symbols)
print('\n'.join([branch, remote, status])) out = ' '.join([
branch,
str(ahead),
str(behind),
str(len(staged)),
str(len(conflicts)),
str(len(changed)),
str(len(untracked)),
])
print(out, end='')
...@@ -68,10 +68,12 @@ alias gc!='git commit -v --amend' ...@@ -68,10 +68,12 @@ alias gc!='git commit -v --amend'
alias gca='git commit -v -a' alias gca='git commit -v -a'
alias gca!='git commit -v -a --amend' alias gca!='git commit -v -a --amend'
alias gcan!='git commit -v -a -s --no-edit --amend' alias gcan!='git commit -v -a -s --no-edit --amend'
alias gcam='git commit -a -m'
alias gcb='git checkout -b' alias gcb='git checkout -b'
alias gcf='git config --list' alias gcf='git config --list'
alias gcl='git clone --recursive' alias gcl='git clone --recursive'
alias gclean='git reset --hard && git clean -dfx' alias gclean='git clean -fd'
alias gpristine='git reset --hard && git clean -dfx'
alias gcm='git checkout master' alias gcm='git checkout master'
alias gcmsg='git commit -m' alias gcmsg='git commit -m'
alias gco='git checkout' alias gco='git checkout'
......
...@@ -29,7 +29,10 @@ if [[ -x "${commands[gwhoami]}" ]]; then ...@@ -29,7 +29,10 @@ if [[ -x "${commands[gwhoami]}" ]]; then
'gunexpand' 'guniq' 'gunlink' 'guptime' 'gusers' 'gvdir' 'gwc' 'gwho' 'gunexpand' 'guniq' 'gunlink' 'guptime' 'gusers' 'gvdir' 'gwc' 'gwho'
'gwhoami' 'gyes') 'gwhoami' 'gyes')
# Not part of coreutils, installed separately. # findutils
gcmds+=('gfind' 'gxargs' 'glocate')
# Not part of either coreutils or findutils, installed separately.
gcmds+=('gsed' 'gtar' 'gtime') gcmds+=('gsed' 'gtar' 'gtime')
for gcmd in "${gcmds[@]}"; do for gcmd in "${gcmds[@]}"; do
......
...@@ -54,23 +54,42 @@ __go_tool_complete() { ...@@ -54,23 +54,42 @@ __go_tool_complete() {
'-installsuffix[suffix to add to package directory]:suffix' '-installsuffix[suffix to add to package directory]:suffix'
'-tags[list of build tags to consider satisfied]:tags' '-tags[list of build tags to consider satisfied]:tags'
) )
__go_list() { __go_packages() {
local expl importpaths local gopaths
declare -a importpaths declare -a gopaths
importpaths=($(go list ${words[$CURRENT]}... 2>/dev/null)) gopaths=("${(s/:/)$(go env GOPATH)}")
_wanted importpaths expl 'import paths' compadd "$@" - "${importpaths[@]}" gopaths+=("$(go env GOROOT)")
for p in $gopaths; do
_path_files -W "$p/src" -/
done
}
__go_identifiers() {
compadd $(godoc -templates $ZSH/plugins/golang/templates ${words[-2]} 2> /dev/null)
} }
case ${words[2]} in case ${words[2]} in
clean|doc) doc)
_arguments -s -w : '*:importpaths:__go_list' _arguments -s -w \
"-c[symbol matching honors case (paths not affected)]" \
"-cmd[show symbols with package docs even if package is a command]" \
"-u[show unexported symbols as well as exported]" \
"2:importpaths:__go_packages" \
":next identifiers:__go_identifiers"
;;
clean)
_arguments -s -w \
"-i[remove the corresponding installed archive or binary (what 'go install' would create)]" \
"-n[print the remove commands it would execute, but not run them]" \
"-r[apply recursively to all the dependencies of the packages named by the import paths]" \
"-x[print remove commands as it executes them]" \
"*:importpaths:__go_packages"
;; ;;
fix|fmt|list|vet) fix|fmt|list|vet)
_alternative ':importpaths:__go_list' ':files:_path_files -g "*.go"' _alternative ':importpaths:__go_packages' ':files:_path_files -g "*.go"'
;; ;;
install) install)
_arguments -s -w : ${build_flags[@]} \ _arguments -s -w : ${build_flags[@]} \
"-v[show package names]" \ "-v[show package names]" \
'*:importpaths:__go_list' '*:importpaths:__go_packages'
;; ;;
get) get)
_arguments -s -w : \ _arguments -s -w : \
...@@ -81,7 +100,7 @@ __go_tool_complete() { ...@@ -81,7 +100,7 @@ __go_tool_complete() {
${build_flags[@]} \ ${build_flags[@]} \
"-v[show package names]" \ "-v[show package names]" \
"-o[output file]:file:_files" \ "-o[output file]:file:_files" \
"*:args:{ _alternative ':importpaths:__go_list' ':files:_path_files -g \"*.go\"' }" "*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
;; ;;
test) test)
_arguments -s -w : \ _arguments -s -w : \
...@@ -103,7 +122,7 @@ __go_tool_complete() { ...@@ -103,7 +122,7 @@ __go_tool_complete() {
"-cpuprofile[write CPU profile to file]:file:_files" \ "-cpuprofile[write CPU profile to file]:file:_files" \
"-memprofile[write heap profile to file]:file:_files" \ "-memprofile[write heap profile to file]:file:_files" \
"-memprofilerate[set heap profiling rate]:number" \ "-memprofilerate[set heap profiling rate]:number" \
"*:args:{ _alternative ':importpaths:__go_list' ':files:_path_files -g \"*.go\"' }" "*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
;; ;;
help) help)
_values "${commands[@]}" \ _values "${commands[@]}" \
......
{{with .PDoc}}{{/*
Constants
---------------------------------------
*/}}{{with .Consts}}{{range .}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{/*
Variables
---------------------------------------
*/}}{{with .Vars}}{{range .}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{/*
Functions
---------------------------------------
*/}}{{with .Funcs}}{{range .}}{{ .Name }} {{end}}{{end}}{{/*
Types
---------------------------------------
*/}}{{with .Types}}{{range .}}{{ $TypeName := .Name }}{{ $TypeName }} {{/*
*/}}{{range .Methods}}{{ $TypeName }}.{{.Name}} {{end}}{{/*
*/}}{{range .Funcs}}{{.Name}} {{end}}{{/*
*/}}{{range .Consts}}{{range .Names}}{{.}} {{end}}{{end}}{{/*
*/}}{{range .Vars}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{end}}{{end}}
...@@ -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
......
#!/usr/bin/env zsh
#
# gulp-autocompletion-zsh
#
# Autocompletion for your gulp.js tasks
#
# Copyright(c) 2014 André König <andre.koenig@posteo.de>
# MIT Licensed
#
#
# André König
# Github: https://github.com/akoenig
# Twitter: https://twitter.com/caiifr
#
#
# Grabs all available tasks from the `gulpfile.js`
# in the current directory.
#
function $$gulp_completion() {
compls=$(grep -Eo "gulp.task\(('(([a-zA-Z0-9]|-)*)',)" gulpfile.js 2>/dev/null | grep -Eo "'(([a-zA-Z0-9]|-)*)'" | sed s/"'"//g | sort)
completions=(${=compls})
compadd -- $completions
}
compdef $$gulp_completion gulp
\ No newline at end of file
...@@ -143,5 +143,6 @@ _arguments \ ...@@ -143,5 +143,6 @@ _arguments \
$_command_args \ $_command_args \
'(--app)--app[the app name]' \ '(--app)--app[the app name]' \
'(--remote)--remote[the remote name]' \ '(--remote)--remote[the remote name]' \
'(--help)--help[help about the current command]' \
&& return 0 && return 0
# Jira plugin #
CLI support for JIRA interaction
## Description ##
This plugin provides command line tools for interacting with Atlassian's [JIRA](https://www.atlassian.com/software/jira) bug tracking software.
The interaction is all done through the web. No local installation of JIRA is necessary.
In this document, "JIRA" refers to the JIRA issue tracking server, and `jira` refers to the command this plugin supplies.
## Usage ##
This plugin supplies one command, `jira`, through which all its features are exposed. Most forms of this command open a JIRA page in your web browser.
```
jira # performs the default action
jira new # opens a new issue
jira dashboard # opens your JIRA dashboard
jira reported [username] # queries for issues reported by a user
jira assigned [username] # queries for issues assigned to a user
jira ABC-123 # opens an existing issue
jira ABC-123 m # opens an existing issue for adding a comment
```
#### Debugging usage ####
These calling forms are for developers' use, and may change at any time.
```
jira dumpconfig # displays the effective configuration
```
## Setup ##
The URL for your JIRA instance is set by `$JIRA_URL` or a `.jira_url` file.
Add a `.jira-url` file in the base of your project. You can also set `$JIRA_URL` in your `~/.zshrc` or put a `.jira-url` in your home directory. A `.jira-url` in the current directory takes precedence, so you can make per-project customizations.
The same goes with `.jira-prefix` and `$JIRA_PREFIX`. These control the prefix added to all issue IDs, which differentiates projects within a JIRA instance.
For example:
```
cd to/my/project
echo "https://jira.atlassian.com" >> .jira-url
```
(Note: The current implementation only looks in the current directory for `.jira-url` and `.jira-prefix`, not up the path, so if you are in a subdirectory of your project, it will fall back to your default JIRA URL. This will probably change in the future though.)
### Variables ###
* `$JIRA_URL` - Your JIRA instance's URL
* `$JIRA_NAME` - Your JIRA username; used as the default user for `assigned`/`reported` searches
* `$JIRA_PREFIX` - Prefix added to issue ID arguments
* `$JIRA_RAPID_BOARD` - Set to `true` if you use Rapid Board
* `$JIRA_DEFAULT_ACTION` - Action to do when `jira` is called with no arguments; defaults to "new"
### Browser ###
Your default web browser, as determined by how `open_command` handles `http://` URLs, is used for interacting with the JIRA instance. If you change your system's URL handler associations, it will change the browser that `jira` uses.
#compdef jira
#autoload
local -a _1st_arguments
_1st_arguments=(
'new:create a new issue'
'dashboard:open the dashboard'
'reported:search for issues reported by a user'
'assigned:search for issues assigned to a user'
'dumpconfig:display effective jira configuration'
)
_arguments -C \
':command:->command' \
'*::options:->options'
case $state in
(command)
_describe -t commands "jira subcommand" _1st_arguments
return
;;
esac
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