Added edge case tests for ~ and /

Fixed edge cases
pull/22/head
Christo Kotze 7 years ago
parent 64cbdaf4c2
commit 110f54f7e2

@ -723,8 +723,9 @@ set_default POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD false
# * $1 Alignment: string - left|right # * $1 Alignment: string - left|right
# * $2 Index: integer # * $2 Index: integer
prompt_dir() { prompt_dir() {
local current_path="$(print -P "%~")" local current_dir="$(print -P "%~")"
local paths=(${(s:/:)PWD}) local paths
[[ current_dir != "/" ]] && paths=(${(s:/:)current_dir}) || paths[0] = "/"
local cur_path cur_short_path directory dir_length cur_dir local cur_path cur_short_path directory dir_length cur_dir
if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_folder_marker" ]]; then if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_folder_marker" ]]; then
@ -732,32 +733,40 @@ prompt_dir() {
case "$POWERLEVEL9K_SHORTEN_STRATEGY" in case "$POWERLEVEL9K_SHORTEN_STRATEGY" in
truncate_middle) truncate_middle)
cur_short_path='/' if [[ $current_dir != "/" ]]; then
local last_pos [[ $current_dir == '~'* ]] && cur_short_path='' || cur_short_path='/'
local max_length=$(( $POWERLEVEL9K_SHORTEN_DIR_LENGTH * 2 )) local last_pos
for directory in ${paths[@]} local max_length=$(( $POWERLEVEL9K_SHORTEN_DIR_LENGTH * 2 ))
do for directory in ${paths[@]}
cur_dir=$directory do
dir_length=${#cur_dir} cur_dir=$directory
if (( $dir_length > $max_length )); then dir_length=${#cur_dir}
last_pos=$(( $dir_length - $POWERLEVEL9K_SHORTEN_DIR_LENGTH )) if (( $dir_length > $max_length )); then
cur_dir=${cur_dir:0:$POWERLEVEL9K_SHORTEN_DIR_LENGTH}$POWERLEVEL9K_SHORTEN_DELIMITER${cur_dir:$last_pos:$dir_length} last_pos=$(( $dir_length - $POWERLEVEL9K_SHORTEN_DIR_LENGTH ))
fi cur_dir=${cur_dir:0:$POWERLEVEL9K_SHORTEN_DIR_LENGTH}$POWERLEVEL9K_SHORTEN_DELIMITER${cur_dir:$last_pos:$dir_length}
cur_short_path+="$cur_dir/" fi
done cur_short_path+="$cur_dir/"
current_path="${cur_short_path: : -1}" done
current_path="${cur_short_path: : -1}"
else
current_path="/"
fi
;; ;;
truncate_from_right) truncate_from_right)
cur_short_path='/' if [[ $current_dir != "/" ]]; then
for directory in ${paths[@]} [[ $current_dir == '~'* ]] && cur_short_path='' || cur_short_path='/'
do for directory in ${paths[@]}
cur_dir=$directory do
if (( ${#cur_dir} > $POWERLEVEL9K_SHORTEN_DIR_LENGTH )); then cur_dir=$directory
cur_dir=${cur_dir:0:$POWERLEVEL9K_SHORTEN_DIR_LENGTH}$POWERLEVEL9K_SHORTEN_DELIMITER if (( ${#cur_dir} > $POWERLEVEL9K_SHORTEN_DIR_LENGTH )); then
fi cur_dir=${cur_dir:0:$POWERLEVEL9K_SHORTEN_DIR_LENGTH}$POWERLEVEL9K_SHORTEN_DELIMITER
cur_short_path+="$cur_dir/" fi
done cur_short_path+="$cur_dir/"
current_path="${cur_short_path: : -1}" done
current_path="${cur_short_path: : -1}"
else
current_path="/"
fi
;; ;;
truncate_with_package_name) truncate_with_package_name)
local name repo_path package_path current_dir zero local name repo_path package_path current_dir zero
@ -769,11 +778,11 @@ prompt_dir() {
# Remove trailing slash from git path, so that we can # Remove trailing slash from git path, so that we can
# remove that git path from the pwd. # remove that git path from the pwd.
gitPath=${gitPath%/} gitPath=${gitPath%/}
package_path=${$current_path%%$gitPath} package_path=${current_dir%%$gitPath}
# Remove trailing slash # Remove trailing slash
package_path=${package_path%/} package_path=${package_dir%/}
elif [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) == "true" ]]; then elif [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) == "true" ]]; then
package_path=${$current_path%%/.git*} package_path=${current_dir%%/.git*}
fi fi
# Replace the shortest possible match of the marked folder from # Replace the shortest possible match of the marked folder from
@ -785,7 +794,7 @@ prompt_dir() {
# Then, find the length of the package_path string, and save the # 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 # subdirectory path as a substring of the current directory's path from 0
# to the length of the package path's string # to the length of the package path's string
subdirectory_path=$(truncatePathFromRight "${current_path:${#${(S%%)package_path//$~zero/}}}") subdirectory_path=$(truncatePathFromRight "${current_dir:${#${(S%%)package_path//$~zero/}}}")
# Parse the 'name' from the package.json; if there are any problems, just # Parse the 'name' from the package.json; if there are any problems, just
# print the file path # print the file path
defined POWERLEVEL9K_DIR_PACKAGE_FILES || POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json) defined POWERLEVEL9K_DIR_PACKAGE_FILES || POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json)
@ -807,7 +816,7 @@ prompt_dir() {
# from the package.json and append the current subdirectory # from the package.json and append the current subdirectory
current_path="`echo $packageName | tr -d '"'`$subdirectory_path" current_path="`echo $packageName | tr -d '"'`$subdirectory_path"
else else
current_path=$(truncatePathFromRight "$(pwd | sed -e "s,^$HOME,~,")" ) current_path=$(truncatePathFromRight ${current_path//$HOME/"~"} )
fi fi
;; ;;
truncate_with_folder_marker) truncate_with_folder_marker)
@ -834,7 +843,7 @@ prompt_dir() {
# Replace the shortest possible match of the marked folder from # Replace the shortest possible match of the marked folder from
# the current path. # the current path.
current_path=$current_path${PWD#${last_marked_folder}*} current_path=$current_path${current_dir#${last_marked_folder}*}
;; ;;
truncate_to_unique) truncate_to_unique)
# for each parent path component find the shortest unique beginning # for each parent path component find the shortest unique beginning
@ -878,9 +887,9 @@ prompt_dir() {
local current_state="DEFAULT" local current_state="DEFAULT"
if [[ "${POWERLEVEL9K_DIR_SHOW_WRITABLE}" == true && ! -w "$PWD" ]]; then if [[ "${POWERLEVEL9K_DIR_SHOW_WRITABLE}" == true && ! -w "$PWD" ]]; then
current_state="NOT_WRITABLE" current_state="NOT_WRITABLE"
elif [[ $(print -P "%~") == '~' ]]; then elif [[ $current_dir == '~' ]]; then
current_state="HOME" current_state="HOME"
elif [[ $(print -P "%~") == '~'* ]]; then elif [[ $current_dir == '~'* ]]; then
current_state="HOME_SUBFOLDER" current_state="HOME_SUBFOLDER"
fi fi

Loading…
Cancel
Save