From daa7255e85e939293bca28e93c8a058425368243 Mon Sep 17 00:00:00 2001
From: Alex LaFroscia <alex@lafroscia.com>
Date: Sat, 5 Mar 2016 22:12:44 -0500
Subject: Add shortening strategy based on package.json name

---
 powerlevel9k.zsh-theme | 38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 2ef4fe3c..89b38e48 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
 }
 
-- 
cgit v1.2.3