From d75b714d8acd93ef6cecd76b1d0b4ce11300f409 Mon Sep 17 00:00:00 2001 From: romkatv Date: Tue, 16 Jul 2019 23:03:49 +0200 Subject: [PATCH 1/2] add nodenv prompt; #121 --- internal/p10k.zsh | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/internal/p10k.zsh b/internal/p10k.zsh index c7cc6c4d..348b4f30 100755 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -1530,6 +1530,57 @@ prompt_nodeenv() { fi } +function _p9k_read_nodenv_version_file() { + [[ -r $1 ]] || return + local rest + read _P9K_RETVAL rest <$1 2>/dev/null + [[ -n $_P9K_RETVAL ]] +} + +function _p9k_nodeenv_version_transform() { + local dir=${NODENV_ROOT:-$HOME/.nodenv}/versions + [[ -z $1 || $1 == system ]] && _P9K_RETVAL=$1 && return + [[ -d $dir/$1 ]] && _P9K_RETVAL=$1 && return + [[ -d $dir/${1/v} ]] && _P9K_RETVAL=${1/v} && return + [[ -d $dir/${1#node-} ]] && _P9K_RETVAL=${1#node-} && return + [[ -d $dir/${1#node-v} ]] && _P9K_RETVAL=${1#node-v} && return + return 1 +} + +function _p9k_nodenv_global_version() { + _p9k_read_nodenv_version_file ${NODENV_ROOT:-$HOME/.nodenv}/version || _P9K_RETVAL=system +} + +################################################################ +# Segment to display nodenv information +# https://github.com/nodenv/nodenv +set_default POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW false +prompt_nodenv() { + _P9K_RETVAL=$NODENV_VERSION + if [[ -z $_P9K_RETVAL ]]; then + [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$PWD/$NODENV_DIR" + while [[ $dir != //[^/]# ]]; do + _p9k_read_nodenv_version_file $dir/.node-version && break + [[ $dir == / ]] && break + dir=${dir:h} + done + if [[ -z $_P9K_RETVAL ]]; then + [[ $POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW == true ]] || return + _p9k_nodenv_global_version + fi + fi + + _p9k_nodeenv_version_transform $_P9K_RETVAL || return + local v=$_P9K_RETVAL + + if [[ $POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW == false ]]; then + _p9k_nodenv_global_version + _p9k_nodeenv_version_transform $_P9K_RETVAL && [[ $v == $_P9K_RETVAL ]] && return + fi + + "$1_prompt_segment" "$0" "$2" "black" "green" 'NODE_ICON' 0 '' "${v//\%/%%}" +} + ################################################################ # Segment to print a little OS icon prompt_os_icon() { From 3bf893162065cabe604241daba0ba9781122af7d Mon Sep 17 00:00:00 2001 From: romkatv Date: Tue, 16 Jul 2019 23:16:44 +0200 Subject: [PATCH 2/2] bail out of *env prompts if the corresponding *env command doesn't exist --- internal/p10k.zsh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/p10k.zsh b/internal/p10k.zsh index 348b4f30..7a21008b 100755 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -1556,6 +1556,7 @@ function _p9k_nodenv_global_version() { # https://github.com/nodenv/nodenv set_default POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW false prompt_nodenv() { + (( $+commands[nodenv] )) || return _P9K_RETVAL=$NODENV_VERSION if [[ -z $_P9K_RETVAL ]]; then [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$PWD/$NODENV_DIR" @@ -1643,6 +1644,7 @@ function _p9k_rbenv_global_version() { # https://github.com/rbenv/rbenv#choosing-the-ruby-version set_default POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW false prompt_rbenv() { + (( $+commands[rbenv] )) || return local v=$RBENV_VERSION if [[ -z $v ]]; then [[ $RBENV_DIR == /* ]] && local dir=$RBENV_DIR || local dir="$PWD/$RBENV_DIR" @@ -2374,6 +2376,7 @@ function _p9k_pyenv_global_version() { # https://github.com/pyenv/pyenv#choosing-the-python-version set_default POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW false prompt_pyenv() { + (( $+commands[pyenv] )) || return local v=${(j.:.)${(@)${(s.:.)PYENV_VERSION}#python-}} if [[ -z $v ]]; then [[ $PYENV_DIR == /* ]] && local dir=$PYENV_DIR || local dir="$PWD/$PYENV_DIR"