diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index 2ef4fe3..89b38e4 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -446,6 +446,42 @@ prompt_dir() { truncate_from_right) current_path=$(pwd | sed -e "s,^$HOME,~," | sed $SED_EXTENDED_REGEX_PARAMETER "s/([^/]{$POWERLEVEL9K_SHORTEN_DIR_LENGTH})[^/]+\//\1$POWERLEVEL9K_SHORTEN_DELIMITER\//g") ;; + truncate_with_package_name) + local name repo_path package_path current_dir zero + + # Get the path of the Git repo, which should have the package.json file + if repo_path=$(git rev-parse --git-dir 2>/dev/null); then + if [[ "$repo_path" == ".git" ]]; then + # If the current path is the root of the project, then the package path is + # the current directory and we don't want to append anything to represent + # the path to a subdirectory + package_path="." + subdirectory_path="" + else + # If the current path is something else, get the path to the package.json + # file by finding the repo path and removing the '.git` from the path + package_path=${repo_path:0:-4} + zero='%([BSUbfksu]|([FB]|){*})' + current_dir=$(pwd) + # Then, find the length of the package_path string, and save the + # subdirectory path as a substring of the current directory's path from 0 + # to the length of the package path's string + subdirectory_path="/${current_dir:${#${(S%%)package_path//$~zero/}}}" + fi + fi + + # Parse the 'name' from the package.json; if there are any problems, just + # print the file path + if name=$( cat "$package_path/package.json" 2> /dev/null | grep "\"name\""); then + name=$(echo $name | awk -F ':' '{print $2}' | awk -F '"' '{print $2}') + + # Instead of printing out the full path, print out the name of the package + # from the package.json and append the current subdirectory + current_path="`echo $name | tr -d '"'`$subdirectory_path" + else + current_path='%~' + fi + ;; *) current_path="%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c" ;; @@ -572,7 +608,7 @@ prompt_nodeenv() { local nodeenv_path="$NODE_VIRTUAL_ENV" if [[ -n "$nodeenv_path" && "$NODE_VIRTUAL_ENV_DISABLE_PROMPT" != true ]]; then local info="$(node -v)[$(basename "$nodeenv_path")]" - "$1_prompt_segment" "$0" "$2" "black" "green" "$info" 'NODE_ICON' + "$1_prompt_segment" "$0" "$2" "black" "green" "$info" 'NODE_ICON' fi }