From dd25b5db1234ea2959b809b83990a7df493816d1 Mon Sep 17 00:00:00 2001 From: Christo Kotze Date: Wed, 18 Jul 2018 19:46:31 +0400 Subject: [PATCH] truncate_to_unique - simplified the code --- powerlevel9k.zsh-theme | 67 +++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index 8074bd29..f171df10 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -745,35 +745,29 @@ prompt_command_execution_time() { } ################################################################ -# Determine the home folder unique path - this is needed for -# truncate_to_unique to work when P9K_DIR_PATH_ABSOLUTE is not -# set the true. +# Determine the unique path - this is needed for the +# truncate_to_unique strategy. # -local home_path="" -getUniqueHomeFolder() { - if [[ "$home_path" == "" ]]; then - local trunc_path directory test_dir test_dir_length - local -a matching - local -a paths - local cur_path='/' - # all users have the $HOME variable set automatically... see http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html - paths=(${(s:/:)HOME}) - for directory in ${paths[@]}; do - test_dir='' - for (( i=0; i < ${#directory}; i++ )); do - test_dir+="${directory:$i:1}" - matching=("$cur_path"/"$test_dir"*/) - if [[ ${#matching[@]} -eq 1 ]]; then - break - fi - done - trunc_path+="$test_dir/" - cur_path+="$directory/" +function getUniqueFolder() { + local trunc_path directory test_dir test_dir_length + local -a matching + local -a paths + local cur_path='/' + paths=(${(s:/:)1}) + for directory in ${paths[@]}; do + test_dir='' + for (( i=0; i < ${#directory}; i++ )); do + test_dir+="${directory:$i:1}" + matching=("$cur_path"/"$test_dir"*/) + if [[ ${#matching[@]} -eq 1 ]]; then + break + fi done - home_path="${trunc_path: : -1}" - fi + trunc_path+="$test_dir/" + cur_path+="$directory/" + done + echo "${trunc_path: : -1}" } -getUniqueHomeFolder ################################################################ # Dir: current working directory @@ -842,25 +836,10 @@ prompt_dir() { # for each parent path component find the shortest unique beginning # characters sequence. Source: https://stackoverflow.com/a/45336078 if (( ${#current_path} > 1 )); then # root and home are exceptions and won't have paths - local -a matching - local cur_path='/' - # we need to use absolute paths for this strategy to work correctly - paths=(${(s:/:)PWD}) - for directory in ${paths[@]}; do - test_dir='' - for (( i=0; i < ${#directory}; i++ )); do - test_dir+="${directory:$i:1}" - matching=("$cur_path"/"$test_dir"*/) - if [[ ${#matching[@]} -eq 1 ]]; then - break - fi - done - trunc_path+="$test_dir/" - cur_path+="$directory/" - done # cheating here to retain ~ as home folder - [[ $current_path == "~"* ]] && trunc_path="~${trunc_path//${home_path}/}" || trunc_path="/${trunc_path}" - current_path="${trunc_path: : -1}" + local home_path="$(getUniqueFolder $HOME)" + trunc_path="$(getUniqueFolder $PWD)" + [[ $current_path == "~"* ]] && current_path="~${trunc_path//${home_path}/}" || current_path="/${trunc_path}" fi ;; truncate_with_folder_marker)