Commit e8639c70 authored by Tim O'Brien's avatar Tim O'Brien
Browse files

Update to current robbyrussell/oh-my-zsh master

parents 797e1f9a 9c08641d
...@@ -65,7 +65,7 @@ Once you find a theme that you want to use, you will need to edit the `~/.zshrc` ...@@ -65,7 +65,7 @@ Once you find a theme that you want to use, you will need to edit the `~/.zshrc`
ZSH_THEME="robbyrussell" ZSH_THEME="robbyrussell"
``` ```
To use a different theme, simple change the value to match the name of your desired theme. For example: To use a different theme, simply change the value to match the name of your desired theme. For example:
```shell ```shell
ZSH_THEME="agnoster" # (this is one of the fancy ones) ZSH_THEME="agnoster" # (this is one of the fancy ones)
...@@ -77,6 +77,14 @@ Open up a new terminal window and your prompt should look something like... ...@@ -77,6 +77,14 @@ Open up a new terminal window and your prompt should look something like...
In case you did not find a suitable theme for your needs, please have a look at the wiki for [more of them](https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes). In case you did not find a suitable theme for your needs, please have a look at the wiki for [more of them](https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes).
If you're feeling feisty, you can let the computer select one randomly for you each time you open a new terminal window.
```shell
ZSH_THEME="random" # (...please let it be pie... please be some pie..)
```
## Advanced Topics ## Advanced Topics
If you're the type that likes to get their hands dirty, these sections might resonate. If you're the type that likes to get their hands dirty, these sections might resonate.
......
...@@ -15,7 +15,7 @@ if [ $commands[autojump] ]; then # check if autojump is installed ...@@ -15,7 +15,7 @@ if [ $commands[autojump] ]; then # check if autojump is installed
. /usr/local/share/autojump/autojump.zsh . /usr/local/share/autojump/autojump.zsh
elif [ -f /opt/local/etc/profile.d/autojump.zsh ]; then # mac os x with ports elif [ -f /opt/local/etc/profile.d/autojump.zsh ]; then # mac os x with ports
. /opt/local/etc/profile.d/autojump.zsh . /opt/local/etc/profile.d/autojump.zsh
elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump.zsh ]; then # mac os x with brew elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump.sh ]; then # mac os x with brew
. `brew --prefix`/etc/autojump.zsh . `brew --prefix`/etc/autojump.sh
fi fi
fi fi
...@@ -27,7 +27,7 @@ __docker_all_containers() { ...@@ -27,7 +27,7 @@ __docker_all_containers() {
# output a selectable list of all docker images # output a selectable list of all docker images
__docker_images() { __docker_images() {
declare -a img_cmd declare -a img_cmd
img_cmd=($(docker images | awk 'NR>1{print $1}')) img_cmd=($(docker images | awk 'NR>1{print $1}'| sed 's/:/\\:/g'))
_describe 'images' img_cmd _describe 'images' img_cmd
} }
......
# Ember-cli # Ember CLI
**Maintainer:** [BilalBudhani](http://www.github.com/BilalBudhani) **Maintainers:** [BilalBudhani](http://www.github.com/BilalBudhani), [eubenesa](http://www.github.com/eubenesa)
Ember-cli (http://www.ember-cli.com/) Ember CLI (http://www.ember-cli.com/)
### List of Aliases ### List of Aliases
alias es='ember serve' alias es='ember serve'
alias ea='ember addon' alias ea='ember addon'
alias eb='ember build' alias eb='ember build'
alias ed='ember destroy' alias ed='ember destroy'
alias eg='ember generate' alias eg='ember generate'
alias eh='ember help' alias eh='ember help'
alias ein='ember init' alias ein='ember init'
alias eia='ember install:addon' alias ei='ember install'
alias eib='ember install:bower' alias et='ember test'
alias ein='ember install:npm' alias eu='ember update'
alias ei='ember install' alias ev='ember version'
alias et='ember test'
alias eu='ember update'
alias ev='ember version'
# Ember ClI # Ember CLI
# visit http://www.ember-cli.com/ to view user guid # Visit http://www.ember-cli.com/ to view user guide
alias es='ember serve' alias es='ember serve'
alias ea='ember addon' alias ea='ember addon'
...@@ -8,9 +8,6 @@ alias ed='ember destroy' ...@@ -8,9 +8,6 @@ alias ed='ember destroy'
alias eg='ember generate' alias eg='ember generate'
alias eh='ember help' alias eh='ember help'
alias ein='ember init' alias ein='ember init'
alias eia='ember install:addon'
alias eib='ember install:bower'
alias ein='ember install:npm'
alias ei='ember install' alias ei='ember install'
alias et='ember test' alias et='ember test'
alias eu='ember update' alias eu='ember update'
......
...@@ -7,8 +7,12 @@ ...@@ -7,8 +7,12 @@
# $emoji - which maps character names to Unicode characters # $emoji - which maps character names to Unicode characters
# $emoji_flags - maps country names to Unicode flag characters using region indicators # $emoji_flags - maps country names to Unicode flag characters using region indicators
# Main emoji
typeset -gAH emoji typeset -gAH emoji
# National flags
typeset -gAH emoji_flags typeset -gAH emoji_flags
# Combining modifiers
typeset -gAH emoji_mod
emoji[copyright_sign]=$'\U00A9' emoji[copyright_sign]=$'\U00A9'
emoji[registered_sign]=$'\U00AE' emoji[registered_sign]=$'\U00AE'
...@@ -448,10 +452,15 @@ emoji[badminton_racquet_and_shuttlecock]=$'\U1F3F8' ...@@ -448,10 +452,15 @@ emoji[badminton_racquet_and_shuttlecock]=$'\U1F3F8'
emoji[bow_and_arrow]=$'\U1F3F9' emoji[bow_and_arrow]=$'\U1F3F9'
emoji[amphora]=$'\U1F3FA' emoji[amphora]=$'\U1F3FA'
emoji[emoji_modifier_fitzpatrick_type_1_2]=$'\U1F3FB' emoji[emoji_modifier_fitzpatrick_type_1_2]=$'\U1F3FB'
emoji_mod[emoji_modifier_fitzpatrick_type_1_2]=$'\U1F3FB'
emoji[emoji_modifier_fitzpatrick_type_3]=$'\U1F3FC' emoji[emoji_modifier_fitzpatrick_type_3]=$'\U1F3FC'
emoji_mod[emoji_modifier_fitzpatrick_type_3]=$'\U1F3FC'
emoji[emoji_modifier_fitzpatrick_type_4]=$'\U1F3FD' emoji[emoji_modifier_fitzpatrick_type_4]=$'\U1F3FD'
emoji_mod[emoji_modifier_fitzpatrick_type_4]=$'\U1F3FD'
emoji[emoji_modifier_fitzpatrick_type_5]=$'\U1F3FE' emoji[emoji_modifier_fitzpatrick_type_5]=$'\U1F3FE'
emoji_mod[emoji_modifier_fitzpatrick_type_5]=$'\U1F3FE'
emoji[emoji_modifier_fitzpatrick_type_6]=$'\U1F3FF' emoji[emoji_modifier_fitzpatrick_type_6]=$'\U1F3FF'
emoji_mod[emoji_modifier_fitzpatrick_type_6]=$'\U1F3FF'
emoji[rat]=$'\U1F400' emoji[rat]=$'\U1F400'
emoji[mouse]=$'\U1F401' emoji[mouse]=$'\U1F401'
emoji[ox]=$'\U1F402' emoji[ox]=$'\U1F402'
......
...@@ -76,8 +76,6 @@ emoji_skintone[6]=$'\U1F3FF' ...@@ -76,8 +76,6 @@ emoji_skintone[6]=$'\U1F3FF'
# These are stored in a single associative array, $emoji_groups, to avoid cluttering up the global # These are stored in a single associative array, $emoji_groups, to avoid cluttering up the global
# namespace, and to allow adding additional group definitions at run time. # namespace, and to allow adding additional group definitions at run time.
# The keys are the group names, and the values are whitespace-separated lists of emoji character names. # The keys are the group names, and the values are whitespace-separated lists of emoji character names.
#
# These extra local arrays are used to allow more convenient formatting of the source code.
emoji_groups[fruits]=" emoji_groups[fruits]="
tomato tomato
...@@ -255,9 +253,10 @@ function random_emoji() { ...@@ -255,9 +253,10 @@ function random_emoji() {
if [[ -z "$group" || "$group" == "all" ]]; then if [[ -z "$group" || "$group" == "all" ]]; then
names=(${(k)emoji}) names=(${(k)emoji})
else else
names=(${=emoji_groups[$group_name]}) names=(${=emoji_groups[$group]})
fi fi
local list_size=$#names local list_size=${#names}
[[ $list_size -eq 0 ]] && return 1
local random_index=$(( ( RANDOM % $list_size ) + 1 )) local random_index=$(( ( RANDOM % $list_size ) + 1 ))
local name=${names[$random_index]} local name=${names[$random_index]}
echo ${emoji[$name]} echo ${emoji[$name]}
......
...@@ -88,7 +88,7 @@ typeset -gAH emoji_mod ...@@ -88,7 +88,7 @@ typeset -gAH emoji_mod
} }
# Modifiers are included in both the main set and their separate map, # Modifiers are included in both the main set and their separate map,
# because they have a standalone representation as a color swatch. # because they have a standalone representation as a color swatch.
if ( $modifier_status == "modifier" ) { if ( $modifier_status eq "modifier" ) {
$outfh->print("emoji_mod[$omz_name]=\$'$zsh_code'\n"); $outfh->print("emoji_mod[$omz_name]=\$'$zsh_code'\n");
} }
} else { } else {
......
## 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
# no keyword provided, simply show how call methods
if [[ $# -le 1 ]]; then # define search context URLS
echo "Please provide a search-content and a search-term for app.\nEx:\nfrontend <search-content> <search-term>\n" typeset -A urls
return 1 urls=(
angularjs 'https://google.com/search?as_sitesearch=angularjs.org&as_q='
aurajs 'http://aurajs.com/api/#stq='
bem 'https://google.com/search?as_sitesearch=bem.info&as_q='
bootsnipp 'http://bootsnipp.com/search?q='
caniuse 'http://caniuse.com/#search='
codepen 'http://codepen.io/search?q='
compass 'http://compass-style.org/search?q='
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
url="${urls[$1]}${(j:+:)@[2,-1]}"
case "$1" in echo "Opening $url ..."
"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" 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'
...@@ -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'
......
...@@ -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
#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'
)
_arguments -C \
':command:->command' \
'*::options:->options'
case $state in
(command)
_describe -t commands "jira subcommand" _1st_arguments
return
;;
esac
# To use: add a .jira-url file in the base of your project # CLI support for JIRA interaction
# You can also set JIRA_URL in your .zshrc or put .jira-url in your home directory
# .jira-url in the current directory takes precedence
# #
# If you use Rapid Board, set: # Setup:
#JIRA_RAPID_BOARD="true" # Add a .jira-url file in the base of your project
# in you .zshrc # You can also set $JIRA_URL in your .zshrc or put .jira-url in your home directory
# A .jira-url in the current directory takes precedence.
# The same goes with .jira-prefix and $JIRA_PREFIX.
# #
# Setup: cd to/my/project # For example:
# echo "https://name.jira.com" >> .jira-url # cd to/my/project
# Usage: jira # opens a new issue # echo "https://name.jira.com" >> .jira-url
# jira ABC-123 # Opens an existing issue #
open_jira_issue () { # Variables:
if [ -f .jira-url ]; then # $JIRA_RAPID_BOARD - set to "true" if you use Rapid Board
# $JIRA_DEFAULT_ACTION - action to do when `jira` is called witn no args
# defaults to "new"
# $JIRA_NAME - Your JIRA username. Used as default for assigned/reported
# $JIRA_PREFIX - Prefix added to issue ID arguments
#
#
# Usage:
# jira # Performs the default action
# jira new # opens a new issue
# jira reported [username]
# jira assigned [username]
# jira dashboard
# jira ABC-123 # Opens an existing issue
# jira ABC-123 m # Opens an existing issue for adding a comment
: ${JIRA_DEFAULT_ACTION:=new}
function jira() {
local action=${1:=$JIRA_DEFAULT_ACTION}
local jira_url jira_prefix
if [[ -f .jira-url ]]; then
jira_url=$(cat .jira-url) jira_url=$(cat .jira-url)
elif [ -f ~/.jira-url ]; then elif [[ -f ~/.jira-url ]]; then
jira_url=$(cat ~/.jira-url) jira_url=$(cat ~/.jira-url)
elif [[ "x$JIRA_URL" != "x" ]]; then elif [[ -n "${JIRA_URL}" ]]; then
jira_url=$JIRA_URL jira_url=${JIRA_URL}
else else
echo "JIRA url is not specified anywhere." _jira_url_help
return 1 return 1
fi fi
if [ -f .jira-prefix ]; then if [[ -f .jira-prefix ]]; then
jira_prefix=$(cat .jira-prefix) jira_prefix=$(cat .jira-prefix)
elif [ -f ~/.jira-prefix ]; then elif [[ -f ~/.jira-prefix ]]; then
jira_prefix=$(cat ~/.jira-prefix) jira_prefix=$(cat ~/.jira-prefix)
elif [[ -n "${JIRA_PREFIX}" ]]; then
jira_prefix=${JIRA_PREFIX}
else else
jira_prefix="" jira_prefix=""
fi fi
if [ -z "$1" ]; then
if [[ $action == "new" ]]; then
echo "Opening new issue" echo "Opening new issue"
open_command "${jira_url}/secure/CreateIssue!default.jspa" open_command "${jira_url}/secure/CreateIssue!default.jspa"
elif [[ "$1" = "assigned" || "$1" = "reported" ]]; then elif [[ "$action" == "assigned" || "$action" == "reported" ]]; then
jira_query $@ _jira_query $@
else elif [[ "$action" == "dashboard" ]]; then
local addcomment='' echo "Opening dashboard"
open_command "${jira_url}/secure/Dashboard.jspa"
else
# Anything that doesn't match a special action is considered an issue name
local issue_arg=$action
local issue="${jira_prefix}${issue_arg}"
local url_fragment=''
if [[ "$2" == "m" ]]; then if [[ "$2" == "m" ]]; then
addcomment="#add-comment" url_fragment="#add-comment"
echo "Add comment to issue #$1" echo "Add comment to issue #$issue"
else else
echo "Opening issue #$1" echo "Opening issue #$issue"
fi fi
if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then open_command "${jira_url}/issues/${issue}${url_fragment}"
open_command "$jira_url/issues/$jira_prefix$1$addcomment"
else else
open_command "$jira_url/browse/$jira_prefix$1$addcomment" open_command "${jira_url}/browse/${issue}${url_fragment}"
fi fi
fi fi
} }
jira_name () { function _jira_url_help() {
if [[ -z "$1" ]]; then cat << EOF
if [[ "x${JIRA_NAME}" != "x" ]]; then JIRA url is not specified anywhere.
jira_name=${JIRA_NAME} Valid options, in order of precedence:
else .jira-url file
echo "JIRA_NAME not specified" \$HOME/.jira-url file
return 1 JIRA_URL environment variable
fi EOF
}
function _jira_query() {
local verb="$1"
local jira_name lookup preposition query
if [[ "${verb}" == "reported" ]]; then
lookup=reporter
preposition=by
elif [[ "${verb}" == "assigned" ]]; then
lookup=assignee
preposition=to
else else
jira_name=$@ echo "not a valid lookup: $verb" >&2
return 1
fi
jira_name=${2:=$JIRA_NAME}
if [[ -z $jira_name ]]; then
echo "JIRA_NAME not specified" >&2
return 1
fi fi
}
jira_query () { echo "Browsing issues ${verb} ${preposition} ${jira_name}"
verb="$1" query="${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC"
if [[ "${verb}" = "reported" ]]; then open_command "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${query}"
lookup=reporter
preposition=by
elif [[ "${verb}" = "assigned" ]]; then
lookup=assignee
preposition=to
else
echo "not a valid lookup $verb"
return 1
fi
shift 1
jira_name $@
if [[ $? = 1 ]]; then
return 1
fi
echo "Browsing issues ${verb} ${preposition} ${jira_name}"
open_command "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC"
} }
alias jira='open_jira_issue'
# ------------------------------------------------------------------------------
# Author
# ------
#
# * Jerry Ling<jerryling315@gmail.com>
#
# ------------------------------------------------------------------------------
# Usgae
# -----
#
# man will be inserted before the command
#
# ------------------------------------------------------------------------------
man-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != man\ * ]] && LBUFFER="man $LBUFFER"
}
zle -N man-command-line
# Defined shortcut keys: [Esc]man
bindkey "\e"man man-command-line
# ------------------------------------------------------------------------------
# Also, you might want to use man-preview included in 'osx' plugin
# just substitute "man" in the function with "man-preview" after you included OS X in
# the .zshrc
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function tab() { function tab() {
local command="cd \\\"$PWD\\\"; clear; " local command="cd \\\"$PWD\\\"; clear"
(( $# > 0 )) && command="${command}; $*" (( $# > 0 )) && command="${command}; $*"
the_app=$( the_app=$(
......
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