diff --git a/README.markdown b/README.markdown index d4d3fdba..a29df81a 100644 --- a/README.markdown +++ b/README.markdown @@ -65,7 +65,7 @@ Once you find a theme that you want to use, you will need to edit the `~/.zshrc` 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 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... 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 If you're the type that likes to get their hands dirty, these sections might resonate. diff --git a/plugins/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh index 4cf03640..c05c699e 100644 --- a/plugins/autojump/autojump.plugin.zsh +++ b/plugins/autojump/autojump.plugin.zsh @@ -15,7 +15,7 @@ if [ $commands[autojump] ]; then # check if autojump is installed . /usr/local/share/autojump/autojump.zsh elif [ -f /opt/local/etc/profile.d/autojump.zsh ]; then # mac os x with ports . /opt/local/etc/profile.d/autojump.zsh - elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump.zsh ]; then # mac os x with brew - . `brew --prefix`/etc/autojump.zsh + elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump.sh ]; then # mac os x with brew + . `brew --prefix`/etc/autojump.sh fi fi diff --git a/plugins/docker/_docker b/plugins/docker/_docker index 25f55bec..a82a31ad 100644 --- a/plugins/docker/_docker +++ b/plugins/docker/_docker @@ -27,7 +27,7 @@ __docker_all_containers() { # output a selectable list of all docker images __docker_images() { 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 } diff --git a/plugins/ember-cli/README.md b/plugins/ember-cli/README.md index d1dedf88..482c347d 100644 --- a/plugins/ember-cli/README.md +++ b/plugins/ember-cli/README.md @@ -1,22 +1,19 @@ -# 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 -alias es='ember serve' -alias ea='ember addon' -alias eb='ember build' -alias ed='ember destroy' -alias eg='ember generate' -alias eh='ember help' -alias ein='ember init' -alias eia='ember install:addon' -alias eib='ember install:bower' -alias ein='ember install:npm' -alias ei='ember install' -alias et='ember test' -alias eu='ember update' -alias ev='ember version' + alias es='ember serve' + alias ea='ember addon' + alias eb='ember build' + alias ed='ember destroy' + alias eg='ember generate' + alias eh='ember help' + alias ein='ember init' + alias ei='ember install' + alias et='ember test' + alias eu='ember update' + alias ev='ember version' diff --git a/plugins/ember-cli/ember-cli.plugin.zsh b/plugins/ember-cli/ember-cli.plugin.zsh index 044a2c04..a0f34682 100644 --- a/plugins/ember-cli/ember-cli.plugin.zsh +++ b/plugins/ember-cli/ember-cli.plugin.zsh @@ -1,5 +1,5 @@ -# Ember ClI -# visit http://www.ember-cli.com/ to view user guid +# Ember CLI +# Visit http://www.ember-cli.com/ to view user guide alias es='ember serve' alias ea='ember addon' @@ -8,9 +8,6 @@ alias ed='ember destroy' alias eg='ember generate' alias eh='ember help' alias ein='ember init' -alias eia='ember install:addon' -alias eib='ember install:bower' -alias ein='ember install:npm' alias ei='ember install' alias et='ember test' alias eu='ember update' diff --git a/plugins/emoji/emoji-char-definitions.zsh b/plugins/emoji/emoji-char-definitions.zsh index 7d110603..04693da0 100644 --- a/plugins/emoji/emoji-char-definitions.zsh +++ b/plugins/emoji/emoji-char-definitions.zsh @@ -7,8 +7,12 @@ # $emoji - which maps character names to Unicode characters # $emoji_flags - maps country names to Unicode flag characters using region indicators +# Main emoji typeset -gAH emoji +# National flags typeset -gAH emoji_flags +# Combining modifiers +typeset -gAH emoji_mod emoji[copyright_sign]=$'\U00A9' emoji[registered_sign]=$'\U00AE' @@ -448,10 +452,15 @@ emoji[badminton_racquet_and_shuttlecock]=$'\U1F3F8' emoji[bow_and_arrow]=$'\U1F3F9' emoji[amphora]=$'\U1F3FA' 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_mod[emoji_modifier_fitzpatrick_type_3]=$'\U1F3FC' emoji[emoji_modifier_fitzpatrick_type_4]=$'\U1F3FD' +emoji_mod[emoji_modifier_fitzpatrick_type_4]=$'\U1F3FD' emoji[emoji_modifier_fitzpatrick_type_5]=$'\U1F3FE' +emoji_mod[emoji_modifier_fitzpatrick_type_5]=$'\U1F3FE' emoji[emoji_modifier_fitzpatrick_type_6]=$'\U1F3FF' +emoji_mod[emoji_modifier_fitzpatrick_type_6]=$'\U1F3FF' emoji[rat]=$'\U1F400' emoji[mouse]=$'\U1F401' emoji[ox]=$'\U1F402' diff --git a/plugins/emoji/emoji.plugin.zsh b/plugins/emoji/emoji.plugin.zsh index a98d0b71..7876f1c8 100644 --- a/plugins/emoji/emoji.plugin.zsh +++ b/plugins/emoji/emoji.plugin.zsh @@ -76,8 +76,6 @@ emoji_skintone[6]=$'\U1F3FF' # 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. # 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]=" tomato @@ -255,9 +253,10 @@ function random_emoji() { if [[ -z "$group" || "$group" == "all" ]]; then names=(${(k)emoji}) else - names=(${=emoji_groups[$group_name]}) + names=(${=emoji_groups[$group]}) fi - local list_size=$#names + local list_size=${#names} + [[ $list_size -eq 0 ]] && return 1 local random_index=$(( ( RANDOM % $list_size ) + 1 )) local name=${names[$random_index]} echo ${emoji[$name]} diff --git a/plugins/emoji/update_emoji.pl b/plugins/emoji/update_emoji.pl index d90c6e31..04f3ce8e 100644 --- a/plugins/emoji/update_emoji.pl +++ b/plugins/emoji/update_emoji.pl @@ -88,7 +88,7 @@ typeset -gAH emoji_mod } # Modifiers are included in both the main set and their separate map, # 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"); } } else { diff --git a/plugins/frontend-search/README.md b/plugins/frontend-search/README.md index 801d450f..d0bc5589 100644 --- a/plugins/frontend-search/README.md +++ b/plugins/frontend-search/README.md @@ -1,74 +1,60 @@ -## 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=( ... frontend-search) -... ``` -## Commands ## +## Usage ## -All command searches are accept only in format +You can use the frontend-search plugin in these two forms: -* `frontend ` +* `frontend [more terms if you want]` +* ` [more terms if you want]` -The search content are +For example, these two are equivalent: -* `jquery ` -* `mdn ` -* `compass ` -* `html5please ` -* `caniuse ` -* `aurajs ` -* `dartlang ` -* `lodash ` -* `qunit ` -* `fontello ` -* `bootsnipp ` -* `cssflow ` -* `codepen ` -* `unheap ` -* `bem &as_sitesearch=bem.info>` -* `smacss &as_sitesearch=smacss.com>` -* `angularjs &as_sitesearch=angularjs.org>` -* `reactjs &as_sitesearch=facebook.github.io/react>` -* `emberjs ` -* `stackoverflow ` +```zsh +$ frontend angularjs dependency injection +$ angularjs dependency injection +``` +Available search contexts are: -## Aliases ## +| context | URL | +|---------------|--------------------------------------------------------------------------| +| 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=` | -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` +If you want to have another context, open an Issue and tell us! ## Author @@ -77,5 +63,3 @@ There are a few aliases presented as well: + + + - -New features comming soon. diff --git a/plugins/frontend-search/_frontend-search.sh b/plugins/frontend-search/_frontend-search.sh index 252f2157..b12f829a 100644 --- a/plugins/frontend-search/_frontend-search.sh +++ b/plugins/frontend-search/_frontend-search.sh @@ -37,6 +37,7 @@ function _frontend() { 'reactjs: Search in React website' 'emberjs: Search in Ember website' 'stackoverflow: Search in StackOverflow website' + 'npmjs: Search in NPMJS website' ) _arguments -C \ @@ -110,6 +111,9 @@ function _frontend() { stackoverflow) _describe -t points "Warp points" frontend_points && ret=0 ;; + npmjs) + _describe -t points "Warp points" frontend_points && ret=0 + ;; esac ;; esac diff --git a/plugins/frontend-search/frontend-search.plugin.zsh b/plugins/frontend-search/frontend-search.plugin.zsh index f7485621..2fd5416b 100644 --- a/plugins/frontend-search/frontend-search.plugin.zsh +++ b/plugins/frontend-search/frontend-search.plugin.zsh @@ -1,150 +1,91 @@ -# 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 \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 ' or '')" - 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 angularjs='frontend angularjs' alias aurajs='frontend aurajs' -alias dartlang='frontend dartlang' -alias lodash='frontend lodash' - -#tests -alias qunit='frontend qunit' - -#fonts -alias fontello='frontend fontello' - -# snippets +alias bem='frontend bem' alias bootsnipp='frontend bootsnipp' -alias cssflow='frontend cssflow' +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' -# css architecture -alias bem='frontend bem' -alias smacss='frontend smacss' +function frontend() { + emulate -L zsh -# frameworks -alias angularjs='frontend angularjs' -alias reactjs='frontend reactjs' -alias emberjs='frontend emberjs' + # define search context URLS + typeset -A urls + 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=' + ) -# search websites -alias stackoverflow='frontend stackoverflow' + # 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 + + # check whether the search context is supported + if [[ -z "$urls[$1]" ]] + then + echo "Search context \"$1\" currently not supported." + echo "" + echo "Valid contexts are:" + echo "" + echo " angularjs, aurajs, bem, bootsnipp, caniuse, codepen, compass, cssflow, " + echo " dartlang, emberjs, fontello, html5please, jquery, lodash, mdn, npmjs, " + echo " qunit, reactjs, smacss, stackoverflow, unheap" + echo "" + return 1 + fi + + # build search url: + # join arguments passed with '+', then append to search context URL + # TODO substitute for proper urlencode method + url="${urls[$1]}${(j:+:)@[2,-1]}" + + echo "Opening $url ..." + + open_command "$url" +} diff --git a/plugins/git-flow/git-flow.plugin.zsh b/plugins/git-flow/git-flow.plugin.zsh index 4357c089..444440bc 100644 --- a/plugins/git-flow/git-flow.plugin.zsh +++ b/plugins/git-flow/git-flow.plugin.zsh @@ -21,7 +21,7 @@ # #Alias -alias gf='git flow' +alias gfl='git flow' alias gcd='git checkout develop' alias gch='git checkout hotfix' alias gcr='git checkout release' diff --git a/plugins/git-prompt/git-prompt.plugin.zsh b/plugins/git-prompt/git-prompt.plugin.zsh index d868a5fe..5175bf70 100644 --- a/plugins/git-prompt/git-prompt.plugin.zsh +++ b/plugins/git-prompt/git-prompt.plugin.zsh @@ -1,57 +1,92 @@ # ZSH Git Prompt Plugin from: # http://github.com/olivierverdier/zsh-git-prompt -# -export __GIT_PROMPT_DIR=$ZSH/plugins/git-prompt -# Allow for functions in the prompt. -setopt PROMPT_SUBST +__GIT_PROMPT_DIR="${0:A:h}" -## Enable auto-execution of functions. -typeset -ga preexec_functions -typeset -ga precmd_functions -typeset -ga chpwd_functions +## Hook function definitions +function chpwd_update_git_vars() { + update_current_git_vars +} -# 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() { case "$2" in - git*) + git*|hub*|gh*|stg*) __EXECUTED_GIT_COMMAND=1 ;; esac } 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 unset __EXECUTED_GIT_COMMAND fi } -function chpwd_update_git_vars() { - update_current_git_vars -} +chpwd_functions+=(chpwd_update_git_vars) +precmd_functions+=(precmd_update_git_vars) +preexec_functions+=(preexec_update_git_vars) + +## Function definitions function update_current_git_vars() { unset __CURRENT_GIT_STATUS local gitstatus="$__GIT_PROMPT_DIR/gitstatus.py" - _GIT_STATUS=`python ${gitstatus}` - __CURRENT_GIT_STATUS=("${(f)_GIT_STATUS}") + _GIT_STATUS=$(python ${gitstatus} 2>/dev/null) + __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 - 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 } +# 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. -#PROMPT='%B%m%~%b$(prompt_git_info) %# ' -# for a right prompt: -#RPROMPT='%b$(prompt_git_info)' -RPROMPT='$(prompt_git_info)' +RPROMPT='$(git_super_status)' diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py index 25684143..a8eb8284 100644 --- a/plugins/git-prompt/gitstatus.py +++ b/plugins/git-prompt/gitstatus.py @@ -1,82 +1,84 @@ #!/usr/bin/env python -# -*- coding: UTF-8 -*- -from subprocess import Popen, PIPE +from __future__ import print_function + +import sys import re - -# change those symbols to whatever you prefer -symbols = { - 'ahead of': '↑', - 'behind': '↓', - 'staged': '♦', - 'changed': '‣', - 'untracked': '…', - 'clean': '⚡', - 'unmerged': '≠', - 'sha1': ':' -} - -output, error = Popen( - ['git', 'status'], stdout=PIPE, stderr=PIPE, universal_newlines=True).communicate() - -if error: - import sys - sys.exit(0) -lines = output.splitlines() - -behead_re = re.compile( - r"^# Your branch is (ahead of|behind) '(.*)' by (\d+) commit") -diverge_re = re.compile(r"^# and have (\d+) and (\d+) different") - -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) +import shlex +from subprocess import Popen, PIPE, check_output -def execute(*command): - out, err = Popen(stdout=PIPE, stderr=PIPE, *command).communicate() - if not err: - nb = len(out.splitlines()) +def get_tagname_or_hash(): + """return tagname if exists else hash""" + cmd = 'git log -1 --format="%h%d"' + 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] + + if tagname: + return tagname + elif hash_: + return hash_ + return None + + +# `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 + +# collect git status information +untracked, staged, changed, conflicts = [], [], [], [] +ahead, behind = 0, 0 +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: - nb = '?' - return nb + if st[1] == 'M': + changed.append(st) + if st[0] == 'U': + conflicts.append(st) + elif st[0] != ' ': + staged.append(st) -if staged.search(output): - nb = execute( - ['git', 'diff', '--staged', '--name-only', '--diff-filter=ACDMRT']) - 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='') diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index cc6eb103..bbee13ab 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -68,10 +68,12 @@ alias gc!='git commit -v --amend' alias gca='git commit -v -a' alias gca!='git commit -v -a --amend' alias gcan!='git commit -v -a -s --no-edit --amend' +alias gcam='git commit -a -m' alias gcb='git checkout -b' alias gcf='git config --list' 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 gcmsg='git commit -m' alias gco='git checkout' diff --git a/plugins/heroku/_heroku b/plugins/heroku/_heroku index bb2f7403..fd72e530 100644 --- a/plugins/heroku/_heroku +++ b/plugins/heroku/_heroku @@ -143,5 +143,6 @@ _arguments \ $_command_args \ '(--app)--app[the app name]' \ '(--remote)--remote[the remote name]' \ + '(--help)--help[help about the current command]' \ && return 0 diff --git a/plugins/jira/_jira b/plugins/jira/_jira new file mode 100644 index 00000000..b0ea658e --- /dev/null +++ b/plugins/jira/_jira @@ -0,0 +1,21 @@ +#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 diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh index 9a893270..89559767 100644 --- a/plugins/jira/jira.plugin.zsh +++ b/plugins/jira/jira.plugin.zsh @@ -1,90 +1,118 @@ -# To use: add a .jira-url file in the base of your project -# 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 +# CLI support for JIRA interaction # -# If you use Rapid Board, set: -#JIRA_RAPID_BOARD="true" -# in you .zshrc +# Setup: +# Add a .jira-url file in the base of your project +# 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 -# echo "https://name.jira.com" >> .jira-url -# Usage: jira # opens a new issue -# jira ABC-123 # Opens an existing issue -open_jira_issue () { - if [ -f .jira-url ]; then +# For example: +# cd to/my/project +# echo "https://name.jira.com" >> .jira-url +# +# Variables: +# $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) - elif [ -f ~/.jira-url ]; then + elif [[ -f ~/.jira-url ]]; then jira_url=$(cat ~/.jira-url) - elif [[ "x$JIRA_URL" != "x" ]]; then - jira_url=$JIRA_URL + elif [[ -n "${JIRA_URL}" ]]; then + jira_url=${JIRA_URL} else - echo "JIRA url is not specified anywhere." + _jira_url_help return 1 fi - if [ -f .jira-prefix ]; then + if [[ -f .jira-prefix ]]; then jira_prefix=$(cat .jira-prefix) - elif [ -f ~/.jira-prefix ]; then + elif [[ -f ~/.jira-prefix ]]; then jira_prefix=$(cat ~/.jira-prefix) + elif [[ -n "${JIRA_PREFIX}" ]]; then + jira_prefix=${JIRA_PREFIX} else jira_prefix="" fi - if [ -z "$1" ]; then + + if [[ $action == "new" ]]; then echo "Opening new issue" open_command "${jira_url}/secure/CreateIssue!default.jspa" - elif [[ "$1" = "assigned" || "$1" = "reported" ]]; then - jira_query $@ - else - local addcomment='' - if [[ "$2" == "m" ]]; then - addcomment="#add-comment" - echo "Add comment to issue #$1" - else - echo "Opening issue #$1" - fi - - if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then - open_command "$jira_url/issues/$jira_prefix$1$addcomment" - else - open_command "$jira_url/browse/$jira_prefix$1$addcomment" - fi - fi -} - -jira_name () { - if [[ -z "$1" ]]; then - if [[ "x${JIRA_NAME}" != "x" ]]; then - jira_name=${JIRA_NAME} - else - echo "JIRA_NAME not specified" - return 1 - fi + elif [[ "$action" == "assigned" || "$action" == "reported" ]]; then + _jira_query $@ + elif [[ "$action" == "dashboard" ]]; then + echo "Opening dashboard" + open_command "${jira_url}/secure/Dashboard.jspa" else - jira_name=$@ + # 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 + url_fragment="#add-comment" + echo "Add comment to issue #$issue" + else + echo "Opening issue #$issue" + fi + if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then + open_command "${jira_url}/issues/${issue}${url_fragment}" + else + open_command "${jira_url}/browse/${issue}${url_fragment}" + fi fi } -jira_query () { - verb="$1" - if [[ "${verb}" = "reported" ]]; then - 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" +function _jira_url_help() { + cat << EOF +JIRA url is not specified anywhere. +Valid options, in order of precedence: + .jira-url file + \$HOME/.jira-url file + JIRA_URL environment variable +EOF } -alias jira='open_jira_issue' +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 + 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 + + echo "Browsing issues ${verb} ${preposition} ${jira_name}" + query="${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC" + open_command "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${query}" +} diff --git a/plugins/man/man.zsh b/plugins/man/man.zsh new file mode 100644 index 00000000..3490b0b6 --- /dev/null +++ b/plugins/man/man.zsh @@ -0,0 +1,27 @@ +# ------------------------------------------------------------------------------ +# Author +# ------ +# +# * Jerry Ling +# +# ------------------------------------------------------------------------------ +# 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 diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh index a6e3a83e..390960fd 100644 --- a/plugins/osx/osx.plugin.zsh +++ b/plugins/osx/osx.plugin.zsh @@ -6,7 +6,7 @@ # ------------------------------------------------------------------------------ function tab() { - local command="cd \\\"$PWD\\\"; clear; " + local command="cd \\\"$PWD\\\"; clear" (( $# > 0 )) && command="${command}; $*" the_app=$( diff --git a/plugins/rand-quote/rand-quote.plugin.zsh b/plugins/rand-quote/rand-quote.plugin.zsh index c3bf6234..8f345d9a 100644 --- a/plugins/rand-quote/rand-quote.plugin.zsh +++ b/plugins/rand-quote/rand-quote.plugin.zsh @@ -18,8 +18,6 @@ if [[ -x `which curl` ]]; then W=$(echo "$Q" | sed -e 's/.*\/quotes\///g' -e 's/<.*//g' -e 's/.*">//g') if [ "$W" -a "$TXT" ]; then echo "${WHO_COLOR}${W}${COLON_COLOR}: ${TEXT_COLOR}“${TXT}”${END_COLOR}" - else - quote fi } #quote diff --git a/plugins/rbenv/rbenv.plugin.zsh b/plugins/rbenv/rbenv.plugin.zsh index 213e1beb..ef5106f2 100644 --- a/plugins/rbenv/rbenv.plugin.zsh +++ b/plugins/rbenv/rbenv.plugin.zsh @@ -2,14 +2,11 @@ _homebrew-installed() { type brew &> /dev/null } -_rbenv-from-homebrew-installed() { - brew --prefix rbenv &> /dev/null -} - FOUND_RBENV=0 rbenvdirs=("$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" "/usr/local/opt/rbenv") -if _homebrew-installed && _rbenv-from-homebrew-installed ; then - rbenvdirs=($(brew --prefix rbenv) "${rbenvdirs[@]}") +if _homebrew-installed && rbenv_homebrew_path=$(brew --prefix rbenv 2>/dev/null); then + rbenvdirs=($rbenv_homebrew_path "${rbenvdirs[@]}") + unset rbenv_homebrew_path fi for rbenvdir in "${rbenvdirs[@]}" ; do diff --git a/plugins/rvm/rvm.plugin.zsh b/plugins/rvm/rvm.plugin.zsh index 234ac164..53e809aa 100644 --- a/plugins/rvm/rvm.plugin.zsh +++ b/plugins/rvm/rvm.plugin.zsh @@ -61,11 +61,11 @@ function gems { local current_ruby=`rvm-prompt i v p` local current_gemset=`rvm-prompt g` - gem list $@ | sed \ - -Ee "s/\([0-9, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \ - -Ee "s|$(echo $rvm_path)|$fg[magenta]\$rvm_path$reset_color|g" \ - -Ee "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \ - -Ee "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g" + gem list $@ | sed -E \ + -e "s/\([0-9, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \ + -e "s|$(echo $rvm_path)|$fg[magenta]\$rvm_path$reset_color|g" \ + -e "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \ + -e "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g" } function _rvm_completion { diff --git a/plugins/spring/README.md b/plugins/spring/README.md new file mode 100644 index 00000000..62bfd801 --- /dev/null +++ b/plugins/spring/README.md @@ -0,0 +1,25 @@ +# Spring Boot oh-my-zsh plugin +oh-my-zsh Spring Boot plugin + +## Spring Boot autocomplete plugin + +- Adds autocomplete options for all spring boot commands. + +## Manual Install + + $ cd ~/.oh-my-zsh/plugins + $ git clone git@github.com:linux-china/oh-my-zsh-spring-boot-plugin.git spring + +Adjust your .zshrc file and add spring to plugins=(...) + +## Tips + +* Install Spring Cloud plugin: spring install org.springframework.cloud:spring-cloud-cli:1.0.2.RELEASE + +## Reference + +* Spring Boot: http://projects.spring.io/spring-boot/ +* Spring Boot CLI: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#cli + +Maintainer : linux_china ([@linux_china](https://twitter.com/linux_china)) + diff --git a/plugins/spring/_spring b/plugins/spring/_spring new file mode 100644 index 00000000..93f19517 --- /dev/null +++ b/plugins/spring/_spring @@ -0,0 +1,29 @@ +#compdef spring 'spring' +#autoload + +_spring() { + + local cword + let cword=CURRENT-1 + + local hints + hints=() + + local reply + while read -r line; do + reply=`echo "$line" | awk '{printf $1 ":"; for (i=2; i ~/.zshrc-omztemp +mv -f ~/.zshrc-omztemp ~/.zshrc echo "\033[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.\033[0m" -sed -i -e "/export PATH=/ c\\ +sed "/export PATH=/ c\\ export PATH=\"$PATH\" -" ~/.zshrc +" ~/.zshrc > ~/.zshrc-omztemp +mv -f ~/.zshrc-omztemp ~/.zshrc TEST_CURRENT_SHELL=$(expr "$SHELL" : '.*/\(.*\)') if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 5f0a81f1..e06e4f33 100644 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -9,7 +9,7 @@ then printf '\033[0;32m%s\033[0m\n' '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ ' printf '\033[0;32m%s\033[0m\n' ' /____/ ' printf '\033[0;34m%s\033[0m\n' 'Hooray! Oh My Zsh has been updated and/or is at the current version.' - printf '\033[0;34m%s\033[1m%s\033[0m\n' 'To keep up on the latest news and updates, follow us on twitter: ' 'http://twitter.com/ohmyzsh' + printf '\033[0;34m%s\033[1m%s\033[0m\n' 'To keep up on the latest news and updates, follow us on twitter: ' 'https://twitter.com/ohmyzsh' printf '\033[0;34m%s\033[1m%s\033[0m\n' 'Get your Oh My Zsh swag at: ' 'http://shop.planetargon.com/' else printf '\033[0;31m%s\033[0m\n' 'There was an error updating. Try again later?'