From 44968b0b9ae494ee0353b8c2de44f62453ed29e8 Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Thu, 26 Dec 2013 21:39:30 +0800 Subject: [PATCH 1/7] add nodeenv-prompt plugin --- plugins/nodeenv-prompt/README.md | 35 +++++++++++++++++++ .../nodeenv-prompt/nodeenv-prompt.plugin.zsh | 18 ++++++++++ 2 files changed, 53 insertions(+) create mode 100644 plugins/nodeenv-prompt/README.md create mode 100644 plugins/nodeenv-prompt/nodeenv-prompt.plugin.zsh diff --git a/plugins/nodeenv-prompt/README.md b/plugins/nodeenv-prompt/README.md new file mode 100644 index 000000000..5ededeb69 --- /dev/null +++ b/plugins/nodeenv-prompt/README.md @@ -0,0 +1,35 @@ +oh-my-zsh::plugin::nodeenv-prompt +==================================== + +This is a plugin derived from +[virtualenv prompt](https://github.com/tonyseek/oh-my-zsh-virtualenv-prompt). +It support to customize the +[nodeenv](https://github.com/ekalinin/nodeenv) +prompt in oh-my-zsh themes. + +Installation +------------ + +You can install this plugin from shell: + + repo="git://github.com/chenhouwu/oh-my-zsh-nodeenv-prompt.git" + target="$HOME/.oh-my-zsh/custom/plugins/nodeenv-prompt" + + git clone $repo $target + + +Customize Theme +--------------- + +There are two constant strings which could be overrided in your custom theme. + +- `ZSH_THEME_NODEENV_PROMPT_PREFIX` +- `ZSH_THEME_NODEENV_PROMPT_SUFFIX` + +And the function `nodeenv_prompt_info` could be used in the prompt of your +theme. + +Example +------- + +See the [oh-my-zsh::theme::seeker](https://github.com/tonyseek/oh-my-zsh-seeker-theme). diff --git a/plugins/nodeenv-prompt/nodeenv-prompt.plugin.zsh b/plugins/nodeenv-prompt/nodeenv-prompt.plugin.zsh new file mode 100644 index 000000000..8d4bde03a --- /dev/null +++ b/plugins/nodeenv-prompt/nodeenv-prompt.plugin.zsh @@ -0,0 +1,18 @@ +export NODE_VIRTUAL_ENV_DISABLE_PROMPT=1 + +ZSH_THEME_NODEENV_PROMPT_PREFIX="(" +ZSH_THEME_NODEENV_PROMPT_SUFFIX=")" + +function nodeenv_prompt_info() { + if [ -n "$NODE_VIRTUAL_ENV" ]; then + + if [ "`basename "$NODE_VIRTUAL_ENV"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + local name="[`basename \`dirname "$NODE_VIRTUAL_ENV"\``]" + else + local name=`basename "$NODE_VIRTUAL_ENV"` + fi + echo "$ZSH_THEME_NODEENV_PROMPT_PREFIX$name$ZSH_THEME_NODEENV_PROMPT_SUFFIX" + fi +} From b53b6df5588d5897d18b61ddf7124b77d59abbb1 Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Thu, 26 Dec 2013 21:46:41 +0800 Subject: [PATCH 2/7] add theme codes example for nodeenv-prompt --- plugins/nodeenv-prompt/README.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/plugins/nodeenv-prompt/README.md b/plugins/nodeenv-prompt/README.md index 5ededeb69..63a73b963 100644 --- a/plugins/nodeenv-prompt/README.md +++ b/plugins/nodeenv-prompt/README.md @@ -31,5 +31,28 @@ theme. Example ------- +See the following theme codes for example: -See the [oh-my-zsh::theme::seeker](https://github.com/tonyseek/oh-my-zsh-seeker-theme). + function _virtualenv_prompt_info { + [[ -n $(whence virtualenv_prompt_info) ]] && virtualenv_prompt_info + } + + function _nodeenv_prompt_info { + [[ -n $(whence nodeenv_prompt_info) ]] && nodeenv_prompt_info + } + + ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[green]%}" + ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" + ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}!" + ZSH_THEME_GIT_PROMPT_CLEAN="" + + function prompt_char { + if [ $UID -eq 0 ]; then echo "%{$fg[red]%}#%{$reset_color%}"; else echo $; fi + } + + PROMPT='%(?, ,%{$fg[red]%}FAIL%{$reset_color%} + ) + $(_nodeenv_prompt_info)$(_virtualenv_prompt_info)%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[yellow]%}%m%{$reset_color%}: %{$fg_bold[blue]%}%~%{$reset_color%}$(git_prompt_info) + %_ $(prompt_char) ' + + RPROMPT='%{$fg[green]%}[%*]%{$reset_color%}' From f99587e315754c2b9917d68adf4fd4e00615bf6a Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Thu, 26 Dec 2013 21:49:51 +0800 Subject: [PATCH 3/7] remove the unuseful installation part in README --- plugins/nodeenv-prompt/README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/plugins/nodeenv-prompt/README.md b/plugins/nodeenv-prompt/README.md index 63a73b963..cc00df20d 100644 --- a/plugins/nodeenv-prompt/README.md +++ b/plugins/nodeenv-prompt/README.md @@ -7,17 +7,6 @@ It support to customize the [nodeenv](https://github.com/ekalinin/nodeenv) prompt in oh-my-zsh themes. -Installation ------------- - -You can install this plugin from shell: - - repo="git://github.com/chenhouwu/oh-my-zsh-nodeenv-prompt.git" - target="$HOME/.oh-my-zsh/custom/plugins/nodeenv-prompt" - - git clone $repo $target - - Customize Theme --------------- From 085d21617daeee004c118da2c41cedf551a5f7fc Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Sat, 4 Jan 2014 18:34:27 +0800 Subject: [PATCH 4/7] add nodeenv --- plugins/{nodeenv-prompt => nodeenv}/README.md | 0 .../nodeenv-prompt.plugin.zsh | 0 plugins/nodeenv/nodeenv.plugin.zsh | 49 +++++++++++++++++++ 3 files changed, 49 insertions(+) rename plugins/{nodeenv-prompt => nodeenv}/README.md (100%) rename plugins/{nodeenv-prompt => nodeenv}/nodeenv-prompt.plugin.zsh (100%) create mode 100644 plugins/nodeenv/nodeenv.plugin.zsh diff --git a/plugins/nodeenv-prompt/README.md b/plugins/nodeenv/README.md similarity index 100% rename from plugins/nodeenv-prompt/README.md rename to plugins/nodeenv/README.md diff --git a/plugins/nodeenv-prompt/nodeenv-prompt.plugin.zsh b/plugins/nodeenv/nodeenv-prompt.plugin.zsh similarity index 100% rename from plugins/nodeenv-prompt/nodeenv-prompt.plugin.zsh rename to plugins/nodeenv/nodeenv-prompt.plugin.zsh diff --git a/plugins/nodeenv/nodeenv.plugin.zsh b/plugins/nodeenv/nodeenv.plugin.zsh new file mode 100644 index 000000000..49b860e0a --- /dev/null +++ b/plugins/nodeenv/nodeenv.plugin.zsh @@ -0,0 +1,49 @@ +if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then + # Automatically activate Git projects's virtual environments based on the + # directory name of the project. Virtual environment name can be overridden + # by placing a .nodeenv file in the project root with a virtualenv name in it + function nodeenv_cwd { + if [ ! $NODEENV_CWD ]; then + NODEENV_CWD=1 + # Check if this is a Git repo + NODEENV_PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null` + if (( $? != 0 )); then + NODEENV_PROJECT_ROOT="." + fi + # Check for virtualenv name override + if [[ -f "$NODEENV_PROJECT_ROOT/.nodeenv" ]]; then + NODEENV_NAME=`cat "$NODEENV_PROJECT_ROOT/.nodeenv"` + elif [[ -f "$NODEENV_PROJECT_ROOT/.nodeenv/bin/activate" ]];then + NODEENV_NAME="$NODEENV_PROJECT_ROOT/.nodeenv" + elif [[ "$NODEENV_PROJECT_ROOT" != "." ]]; then + NODEENV_NAME=`basename "$NODEENV_PROJECT_ROOT"` + else + NODEENV_NAME="" + fi + source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" + if [[ "$NODEENV_NAME" != "" ]]; then + # Activate the environment only if it is not already active + if [[ "$NODE_VIRTUAL_ENV" != "$WORKON_HOME/$NODEENV_NAME" ]]; then + source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" + fi + elif [ $CD_NODEENV ]; then + # We've just left the repo, deactivate the environment + # Note: this only happens if the virtualenv was activated automatically + deactivate_node && unset CD_NODEENV + fi + unset NODEENV_PROJECT_ROOT + unset NODEENV_CWD + fi + } + + # Append workon_cwd to the chpwd_functions array, so it will be called on cd + # http://zsh.sourceforge.net/Doc/Release/Functions.html + # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4 + if (( ${+chpwd_functions} )); then + if (( $chpwd_functions[(I)nodeenv_cwd] == 0 )); then + set -A chpwd_functions $chpwd_functions nodeenv_cwd + fi + else + set -A chpwd_functions nodeenv_cwd + fi +fi From 6a58797dc63849f5b467b58cb693c0d466ef221b Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Sat, 4 Jan 2014 18:38:27 +0800 Subject: [PATCH 5/7] fix --- plugins/nodeenv/nodeenv.plugin.zsh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/nodeenv/nodeenv.plugin.zsh b/plugins/nodeenv/nodeenv.plugin.zsh index 49b860e0a..cd93eecd6 100644 --- a/plugins/nodeenv/nodeenv.plugin.zsh +++ b/plugins/nodeenv/nodeenv.plugin.zsh @@ -22,10 +22,7 @@ if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then fi source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" if [[ "$NODEENV_NAME" != "" ]]; then - # Activate the environment only if it is not already active - if [[ "$NODE_VIRTUAL_ENV" != "$WORKON_HOME/$NODEENV_NAME" ]]; then - source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" - fi + source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" elif [ $CD_NODEENV ]; then # We've just left the repo, deactivate the environment # Note: this only happens if the virtualenv was activated automatically From 0e7f4af3902cce7c816a3c0b562824017eb3ae66 Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Sat, 4 Jan 2014 18:51:44 +0800 Subject: [PATCH 6/7] fix --- plugins/nodeenv/nodeenv-prompt.plugin.zsh | 18 ------------------ plugins/nodeenv/nodeenv.plugin.zsh | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 19 deletions(-) delete mode 100644 plugins/nodeenv/nodeenv-prompt.plugin.zsh diff --git a/plugins/nodeenv/nodeenv-prompt.plugin.zsh b/plugins/nodeenv/nodeenv-prompt.plugin.zsh deleted file mode 100644 index 8d4bde03a..000000000 --- a/plugins/nodeenv/nodeenv-prompt.plugin.zsh +++ /dev/null @@ -1,18 +0,0 @@ -export NODE_VIRTUAL_ENV_DISABLE_PROMPT=1 - -ZSH_THEME_NODEENV_PROMPT_PREFIX="(" -ZSH_THEME_NODEENV_PROMPT_SUFFIX=")" - -function nodeenv_prompt_info() { - if [ -n "$NODE_VIRTUAL_ENV" ]; then - - if [ "`basename "$NODE_VIRTUAL_ENV"`" = "__" ] ; then - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - local name="[`basename \`dirname "$NODE_VIRTUAL_ENV"\``]" - else - local name=`basename "$NODE_VIRTUAL_ENV"` - fi - echo "$ZSH_THEME_NODEENV_PROMPT_PREFIX$name$ZSH_THEME_NODEENV_PROMPT_SUFFIX" - fi -} diff --git a/plugins/nodeenv/nodeenv.plugin.zsh b/plugins/nodeenv/nodeenv.plugin.zsh index cd93eecd6..169237fd5 100644 --- a/plugins/nodeenv/nodeenv.plugin.zsh +++ b/plugins/nodeenv/nodeenv.plugin.zsh @@ -20,7 +20,6 @@ if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then else NODEENV_NAME="" fi - source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" if [[ "$NODEENV_NAME" != "" ]]; then source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" elif [ $CD_NODEENV ]; then @@ -44,3 +43,22 @@ if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then set -A chpwd_functions nodeenv_cwd fi fi + +export NODE_VIRTUAL_ENV_DISABLE_PROMPT=1 + +ZSH_THEME_NODEENV_PROMPT_PREFIX="(" +ZSH_THEME_NODEENV_PROMPT_SUFFIX=")" + +function nodeenv_prompt_info() { + if [ -n "$NODE_VIRTUAL_ENV" ]; then + + if [ "`basename "$NODE_VIRTUAL_ENV"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + local name="[`basename \`dirname "$NODE_VIRTUAL_ENV"\``]" + else + local name=`basename "$NODE_VIRTUAL_ENV"` + fi + echo "$ZSH_THEME_NODEENV_PROMPT_PREFIX$name$ZSH_THEME_NODEENV_PROMPT_SUFFIX" + fi +} From 117feb8978f2608ce874b1ff6c93fdeda2d576d4 Mon Sep 17 00:00:00 2001 From: Chen Houwu Date: Sat, 4 Jan 2014 20:08:30 +0800 Subject: [PATCH 7/7] fix --- plugins/nodeenv/nodeenv.plugin.zsh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/plugins/nodeenv/nodeenv.plugin.zsh b/plugins/nodeenv/nodeenv.plugin.zsh index 169237fd5..6c884e98a 100644 --- a/plugins/nodeenv/nodeenv.plugin.zsh +++ b/plugins/nodeenv/nodeenv.plugin.zsh @@ -1,3 +1,4 @@ +#------activate/deactivate automatically-------------- if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then # Automatically activate Git projects's virtual environments based on the # directory name of the project. Virtual environment name can be overridden @@ -11,16 +12,12 @@ if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then NODEENV_PROJECT_ROOT="." fi # Check for virtualenv name override - if [[ -f "$NODEENV_PROJECT_ROOT/.nodeenv" ]]; then - NODEENV_NAME=`cat "$NODEENV_PROJECT_ROOT/.nodeenv"` - elif [[ -f "$NODEENV_PROJECT_ROOT/.nodeenv/bin/activate" ]];then + if [[ -f "$NODEENV_PROJECT_ROOT/.nodeenv/bin/activate" ]];then NODEENV_NAME="$NODEENV_PROJECT_ROOT/.nodeenv" - elif [[ "$NODEENV_PROJECT_ROOT" != "." ]]; then - NODEENV_NAME=`basename "$NODEENV_PROJECT_ROOT"` else NODEENV_NAME="" fi - if [[ "$NODEENV_NAME" != "" ]]; then + if [[ $NODEENV_NAME != "" ]]; then source $NODEENV_NAME/bin/activate && export CD_NODEENV="$NODEENV_NAME" elif [ $CD_NODEENV ]; then # We've just left the repo, deactivate the environment @@ -44,6 +41,7 @@ if [[ ! $DISABLE_NODEENV_CD -eq 1 ]]; then fi fi +#---------prompt------------------- export NODE_VIRTUAL_ENV_DISABLE_PROMPT=1 ZSH_THEME_NODEENV_PROMPT_PREFIX="("