Browse Source

Update to current robbyrussell/oh-my-zsh master

Tim O'Brien 9 years ago
parent
commit
e8639c700e

+ 9 - 1
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.

+ 2 - 2
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

+ 1 - 1
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
 }
 

+ 14 - 17
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'

+ 2 - 5
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'

+ 9 - 0
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'

+ 3 - 4
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]}

+ 1 - 1
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 {

+ 48 - 64
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=( <your-plugins-list>... frontend-search)
-...
 ```
 
 
-## Commands ##
-
-All command searches are accept only in format
-
-* `frontend <search-content> <search-term>`
-
-The search content are
-
-* `jquery <api.jquery.com>`
-* `mdn <developer.mozilla.org>`
-* `compass <compass-style.org>`
-* `html5please <html5please.com>`
-* `caniuse <caniuse.com>`
-* `aurajs <aurajs.com>`
-* `dartlang <api.dartlang.org/apidocs/channels/stable/dartdoc-viewer>`
-* `lodash <search>`
-* `qunit <api.qunitjs.com>`
-* `fontello <fontello.com>`
-* `bootsnipp <bootsnipp.com>`
-* `cssflow <cssflow.com>`
-* `codepen <codepen.io>`
-* `unheap <www.unheap.com>`
-* `bem <google.com/search?as_q=<search-term>&as_sitesearch=bem.info>`
-* `smacss <google.com/search?as_q=<search-term>&as_sitesearch=smacss.com>`
-* `angularjs <google.com/search?as_q=<search-term>&as_sitesearch=angularjs.org>`
-* `reactjs <google.com/search?as_q=<search-term>&as_sitesearch=facebook.github.io/react>`
-* `emberjs <emberjs.com>`
-* `stackoverflow <stackoverflow.com>`
-
-
-## Aliases ##
-
-There are a few aliases presented as well:
-
-* `jquery` A shorthand for `frontend jquery`
-* `mdn` A shorthand for `frontend mdn`
-* `compass` A shorthand for `frontend compass`
-* `html5please` A shorthand for `frontend html5please`
-* `caniuse` A shorthand for `frontend caniuse`
-* `aurajs` A shorthand for `frontend aurajs`
-* `dartlang` A shorthand for `frontend dartlang`
-* `lodash` A shorthand for `frontend lodash`
-* `qunit` A shorthand for `frontend qunit`
-* `fontello` A shorthand for `frontend fontello`
-* `bootsnipp` A shorthand for `frontend bootsnipp`
-* `cssflow` A shorthand for `frontend cssflow`
-* `codepen` A shorthand for `frontend codepen`
-* `unheap` A shorthand for `frontend unheap`
-* `bem` A shorthand for `frontend bem`
-* `smacss` A shorthand for `frontend smacss`
-* `angularjs` A shorthand for `frontend angularjs`
-* `reactjs` A shorthand for `frontend reactjs`
-* `emberjs` A shorthand for `frontend emberjs`
-* `stackoverflow` A shorthand for `frontend stackoverflow`
+## Usage ##
+
+You can use the frontend-search plugin in these two forms:
+
+* `frontend <context> <term> [more terms if you want]`
+* `<context> <term> [more terms if you want]`
+
+For example, these two are equivalent:
+
+```zsh
+$ frontend angularjs dependency injection
+$ angularjs dependency injection
+```
+
+Available search contexts are:
+
+| 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=`                                              |
+
+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:
 + <https://plus.google.com/+WilsonMendes>
 + <https://twitter.com/willmendesneto>
 + <http://github.com/willmendesneto>
-
-New features comming soon.

+ 4 - 0
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

+ 78 - 137
plugins/frontend-search/frontend-search.plugin.zsh

@@ -1,150 +1,91 @@
-# 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() {
-
-  # no keyword provided, simply show how call methods
-  if [[ $# -le 1 ]]; then
-    echo "Please provide a search-content and a search-term for app.\nEx:\nfrontend <search-content> <search-term>\n"
-    return 1
+  emulate -L zsh
+
+  # 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='
+  )
+
+  # 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 engine is supported
-  if [[ ! $1 =~ '(jquery|mdn|compass|html5please|caniuse|aurajs|dartlang|qunit|fontello|bootsnipp|cssflow|codepen|unheap|bem|smacss|angularjs|reactjs|emberjs|stackoverflow)' ]];
+  # check whether the search context is supported
+  if [[ -z "$urls[$1]" ]]
   then
-    echo "Search valid search content $1 not supported."
-    echo "Valid contents: (formats 'frontend <search-content>' or '<search-content>')"
-    echo "* jquery"
-    echo "* mdn"
-    echo "* compass"
-    echo "* html5please"
-    echo "* caniuse"
-    echo "* aurajs"
-    echo "* dartlang"
-    echo "* lodash"
-    echo "* qunit"
-    echo "* fontello"
-    echo "* bootsnipp"
-    echo "* cssflow"
-    echo "* codepen"
-    echo "* unheap"
-    echo "* bem"
-    echo "* smacss"
-    echo "* angularjs"
-    echo "* reactjs"
-    echo "* emberjs"
-    echo "* stackoverflow"
+    echo "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
 
-  local url="http://"
-  local query=""
+  # 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]}"
 
-  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"
+  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'

+ 1 - 1
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'

+ 62 - 27
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
-
-# Append git functions needed for prompt.
-preexec_functions+='preexec_update_git_vars'
-precmd_functions+='precmd_update_git_vars'
-chpwd_functions+='chpwd_update_git_vars'
+## Hook function definitions
+function chpwd_update_git_vars() {
+    update_current_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)'

+ 74 - 72
plugins/git-prompt/gitstatus.py

@@ -1,82 +1,84 @@
 #!/usr/bin/env python
-# -*- coding: UTF-8 -*-
-from subprocess import Popen, PIPE
-import re
+from __future__ import print_function
 
-# change those symbols to whatever you prefer
-symbols = {
-    'ahead of': '↑',
-    'behind': '↓',
-    'staged': '♦',
-    'changed': '‣',
-    'untracked': '…',
-    'clean': '⚡',
-    'unmerged': '≠',
-    'sha1': ':'
-}
+import sys
+import re
+import shlex
+from subprocess import Popen, PIPE, check_output
 
-output, error = Popen(
-    ['git', 'status'], stdout=PIPE, stderr=PIPE, universal_newlines=True).communicate()
 
-if error:
-    import sys
-    sys.exit(0)
-lines = output.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]
 
-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")
+    if tagname:
+        return tagname
+    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):
-    out, err = Popen(stdout=PIPE, stderr=PIPE, *command).communicate()
-    if not err:
-        nb = len(out.splitlines())
+# 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 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)
+        if st[1] == 'M':
+            changed.append(st)
+        if st[0] == 'U':
+            conflicts.append(st)
+        elif st[0] != ' ':
+            staged.append(st)
 
-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='')

+ 3 - 1
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'

+ 1 - 0
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
 

+ 21 - 0
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

+ 89 - 61
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=''
+  elif [[ "$action" == "assigned" || "$action" == "reported" ]]; then
+    _jira_query $@
+  elif [[ "$action" == "dashboard" ]]; then
+    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
-      addcomment="#add-comment"
-      echo "Add comment to issue #$1"
+      url_fragment="#add-comment"
+      echo "Add comment to issue #$issue"
     else
-      echo "Opening issue #$1"
+      echo "Opening issue #$issue"
     fi
-    
-    if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then
-      open_command  "$jira_url/issues/$jira_prefix$1$addcomment"
+    if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
+      open_command "${jira_url}/issues/${issue}${url_fragment}"
     else
-      open_command  "$jira_url/browse/$jira_prefix$1$addcomment"
+      open_command "${jira_url}/browse/${issue}${url_fragment}"
     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
+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
+}
+
+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
-    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
-}
 
-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"
+  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}"
 }
 
-alias jira='open_jira_issue'
-

+ 27 - 0
plugins/man/man.zsh

@@ -0,0 +1,27 @@
+# ------------------------------------------------------------------------------
+# 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

+ 1 - 1
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=$(

+ 0 - 2
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

+ 3 - 6
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

+ 5 - 5
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 {

+ 25 - 0
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))
+

+ 29 - 0
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<NF; i++) printf $i " "; print $NF}'`
+                hints+=("$reply")
+        done < <(spring hint ${cword} ${words[*]})
+
+        if ((cword == 1)) {
+                _describe -t commands 'commands' hints
+                return 0
+        }
+
+        _describe -t options 'options' hints
+        _files
+
+        return 0
+}
+
+_spring "$@"

+ 1 - 1
plugins/symfony2/symfony2.plugin.zsh

@@ -5,7 +5,7 @@ _symfony_console () {
 }
 
 _symfony2_get_command_list () {
-   `_symfony_console` --no-ansi | sed "1,/Available commands/d" | awk '/^  ?[a-z]+/ { print $1 }'
+   `_symfony_console` --no-ansi | sed "1,/Available commands/d" | awk '/^  ?[^ ]+ / { print $1 }'
 }
 
 _symfony2 () {

+ 6 - 2
plugins/systemadmin/systemadmin.plugin.zsh

@@ -140,12 +140,16 @@ d0() {
 
 # gather external ip address
 geteip() {
-    curl http://ifconfig.me
+    curl -s -S https://icanhazip.com
 }
 
 # determine local IP address
 getip() {
-    ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
+    if (( ${+commands[ip]} )); then
+        ip addr | grep "inet " | grep -v '127.0.0.1' | awk '{print $2}'
+    else
+        ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
+    fi
 }
 
 # Clear zombie processes

+ 9 - 0
plugins/thefuck/README.md

@@ -0,0 +1,9 @@
+# The Fuck
+
+[The Fuck](https://github.com/nvbn/thefuck) plugin — magnificent app which corrects your previous console command.
+
+## Usage
+Press `ESC` twice to correct previous console command.
+
+## Notes
+`Esc`-`Esc` key binding conflicts with [sudo](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/sudo) plugin.

+ 17 - 0
plugins/thefuck/thefuck.plugin.zsh

@@ -0,0 +1,17 @@
+if [[ -z $commands[thefuck] ]]; then
+    echo 'thefuck is not installed, you should "pip install thefuck" first'
+    return -1
+fi
+
+# Register alias
+eval "$(thefuck --alias)"
+
+fuck-command-line() {
+    local FUCK="$(THEFUCK_REQUIRE_CONFIRMATION=0 thefuck $(fc -ln -1 | tail -n 1) 2> /dev/null)"
+    [[ -z $FUCK ]] && echo -n -e "\a" && return
+    BUFFER=$FUCK
+    zle end-of-line
+}
+zle -N fuck-command-line
+# Defined shortcut keys: [Esc] [Esc]
+bindkey "\e\e" fuck-command-line

+ 6 - 1
plugins/ubuntu/ubuntu.plugin.zsh

@@ -3,6 +3,7 @@
 # https://github.com/dbb
 # https://github.com/Mappleconfusers
 # Nicolas Jonas nextgenthemes.com
+# https://github.com/loctauxphilippe
 #
 # Debian, Ubuntu and friends related zsh aliases and functions for zsh
 
@@ -28,6 +29,7 @@ compdef _ppap ppap='sudo ppa-purge'
 
 alias ag='sudo apt-get'            # age - but without sudo
 alias aga='sudo apt-get autoclean' # aac
+alias agar='sudo apt-get autoremove'
 alias agb='sudo apt-get build-dep' # abd
 alias agc='sudo apt-get clean'     # adc
 alias agd='sudo apt-get dselect-upgrade' # ads
@@ -38,9 +40,11 @@ alias agu='sudo apt-get update'   # ad
 alias agud='sudo apt-get update && sudo apt-get dist-upgrade' #adu
 alias agug='sudo apt-get upgrade' # ag
 alias aguu='sudo apt-get update && sudo apt-get upgrade'      #adg
+alias agar='sudo apt-get autoremove'
 
 compdef _ag ag='sudo apt-get'
 compdef _aga aga='sudo apt-get autoclean'
+compdef _agar agar='sudo apt-get autoremove'
 compdef _agb agb='sudo apt-get build-dep'
 compdef _agc agc='sudo apt-get clean'
 compdef _agd agd='sudo apt-get dselect-upgrade'
@@ -51,6 +55,7 @@ compdef _agu agu='sudo apt-get update'
 compdef _agud agud='sudo apt-get update && sudo apt-get dist-upgrade'
 compdef _agug agug='sudo apt-get upgrade'
 compdef _aguu aguu='sudo apt-get update && sudo apt-get upgrade'
+compdef _agar agar='sudo apt-get autoremove'
 
 # Remove ALL kernel images and headers EXCEPT the one in use
 alias kclean='sudo aptitude remove -P ?and(~i~nlinux-(ima|hea) \
@@ -65,7 +70,7 @@ alias mydeb='time dpkg-buildpackage -rfakeroot -us -uc'
 
 # apt-add-repository with automatic install/upgrade of the desired package
 # Usage: aar ppa:xxxxxx/xxxxxx [packagename]
-# If packagename is not given as 2nd arument the function will ask for it and guess the defaupt by taking
+# If packagename is not given as 2nd argument the function will ask for it and guess the default by taking
 # the part after the / from the ppa name wich is sometimes the right name for the package you want to install
 aar() {
 	if [ -n "$2" ]; then

+ 5 - 5
plugins/vundle/vundle.plugin.zsh

@@ -1,13 +1,13 @@
 function vundle-init () {
-  if [ ! -d ~/.vim/bundle/vundle/ ]
+  if [ ! -d ~/.vim/bundle/Vundle.vim/ ]
   then
-    mkdir -p ~/.vim/bundle/vundle/
+    mkdir -p ~/.vim/bundle/Vundle.vim/
   fi
 
-  if [ ! -d ~/.vim/bundle/vundle/.git ] && [ ! -f ~/.vim/bundle/vundle/.git ]
+  if [ ! -d ~/.vim/bundle/Vundle.vim/.git ] && [ ! -f ~/.vim/bundle/Vundle.vim/.git ]
   then
-    git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
-    echo "\n\tRead about vim configuration for vundle at https://github.com/gmarik/vundle\n"
+    git clone git://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
+    echo "\n\tRead about vim configuration for vundle at https://github.com/VundleVim/Vundle.vim\n"
   fi
 }
 

+ 13 - 4
tools/install.sh

@@ -1,5 +1,12 @@
 set -e
 
+CHECK_ZSH_INSTALLED=$(grep /zsh$ /etc/shells | wc -l)
+if [ ! $CHECK_ZSH_INSTALLED -ge 1 ]; then
+  echo "\033[0;33m Zsh is not installed!\033[0m Please install zsh first!"
+  exit
+fi
+unset CHECK_ZSH_INSTALLED
+
 if [ ! -n "$ZSH" ]; then
   ZSH=~/.oh-my-zsh
 fi
@@ -23,14 +30,16 @@ fi
 
 echo "\033[0;34mUsing the Oh My Zsh template file and adding it to ~/.zshrc\033[0m"
 cp $ZSH/templates/zshrc.zsh-template ~/.zshrc
-sed -i -e "/^export ZSH=/ c\\
+sed "/^export ZSH=/ c\\
 export ZSH=$ZSH
-" ~/.zshrc
+" ~/.zshrc > ~/.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

+ 1 - 1
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?'