From ebf808c533ed86ede4b5afcf9206c05b832278db Mon Sep 17 00:00:00 2001 From: Benoit Averty Date: Wed, 10 Aug 2016 00:07:04 +0200 Subject: Add dir_truncate_root option --- powerlevel9k.zsh-theme | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'powerlevel9k.zsh-theme') diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index f104b789..c679ba56 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -571,8 +571,7 @@ prompt_custom() { set_default POWERLEVEL9K_DIR_PATH_SEPARATOR "/" prompt_dir() { local current_path='%~' - if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" ]]; then - + if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_root_marker" ]]; then set_default POWERLEVEL9K_SHORTEN_DELIMITER $'\U2026' case "$POWERLEVEL9K_SHORTEN_STRATEGY" in @@ -610,6 +609,20 @@ prompt_dir() { current_path=$(truncatePathFromRight "$(pwd | sed -e "s,^$HOME,~,")" ) fi ;; + truncate_with_root_marker) + local dir_truncate_root + + dir_truncate_root=$(upsearch $POWERLEVEL9K_ROOT_MARKER_FILE) + zero='%([BSUbfksu]|([FB]|){*})' + + if [[ "$dir_truncate_root" == "/" || "$dir_truncate_root" == "$HOME" ]]; then + current_path='%~' + elif [[ "$dir_truncate_root" == "$HOME"* ]]; then + current_path="~/$POWERLEVEL9K_SHORTEN_DELIMITER/${dir_truncate_root##*/}${PWD:${#${(S%%)dir_truncate_root//$~zero/}}}" + else + current_path="/$POWERLEVEL9K_SHORTEN_DELIMITER/${dir_truncate_root##*/}${PWD:${#${(S%%)dir_truncate_root//$~zero/}}}" + fi + ;; *) current_path="%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c" ;; -- cgit v1.2.3 From 5cc2d51b5829d0ae2eefaa115892da71f6a14d79 Mon Sep 17 00:00:00 2001 From: Benoit Averty Date: Wed, 10 Aug 2016 13:00:52 +0200 Subject: Fix bug when truncate root was set to direct subfolder of home or root --- powerlevel9k.zsh-theme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'powerlevel9k.zsh-theme') diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index c679ba56..afc4a6bc 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -615,7 +615,7 @@ prompt_dir() { dir_truncate_root=$(upsearch $POWERLEVEL9K_ROOT_MARKER_FILE) zero='%([BSUbfksu]|([FB]|){*})' - if [[ "$dir_truncate_root" == "/" || "$dir_truncate_root" == "$HOME" ]]; then + if [[ "$dir_truncate_root" == "/" || "$dir_truncate_root" == "$HOME" || "${dir_truncate_root%/*}" == "$HOME" || ${dir_truncate_root%/*} == "/" ]]; then current_path='%~' elif [[ "$dir_truncate_root" == "$HOME"* ]]; then current_path="~/$POWERLEVEL9K_SHORTEN_DELIMITER/${dir_truncate_root##*/}${PWD:${#${(S%%)dir_truncate_root//$~zero/}}}" -- cgit v1.2.3 From 9f4772f9930c7d56ab04df900ac94456e5a08a22 Mon Sep 17 00:00:00 2001 From: Benoit Averty Date: Wed, 10 Aug 2016 21:31:58 +0200 Subject: More possibilities with truncate folder marker --- functions/utilities.zsh | 17 +++++++++-------- powerlevel9k.zsh-theme | 30 ++++++++++++++++++------------ 2 files changed, 27 insertions(+), 20 deletions(-) (limited to 'powerlevel9k.zsh-theme') diff --git a/functions/utilities.zsh b/functions/utilities.zsh index 8263ce10..22b53c6a 100644 --- a/functions/utilities.zsh +++ b/functions/utilities.zsh @@ -211,15 +211,16 @@ function truncatePathFromRight() { # Search recursively in parent folders for given file. function upsearch () { - if test -e "$1"; then + if [[ "$PWD" == "$HOME" || "$PWD" == "/" ]]; then + echo "$PWD" + elif test -e "$1"; then + pushd .. > /dev/null + upsearch "$1" + popd > /dev/null echo "$PWD" else - if [[ "$PWD" == "/" || "$PWD" == "$HOME" ]]; then - echo "$PWD"; - else - pushd .. > /dev/null - upsearch "$1" - popd > /dev/null - fi + pushd .. > /dev/null + upsearch "$1" + popd > /dev/null fi } diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index afc4a6bc..420f7d0b 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -571,7 +571,7 @@ prompt_custom() { set_default POWERLEVEL9K_DIR_PATH_SEPARATOR "/" prompt_dir() { local current_path='%~' - if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_root_marker" ]]; then + if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_folder_marker" ]]; then set_default POWERLEVEL9K_SHORTEN_DELIMITER $'\U2026' case "$POWERLEVEL9K_SHORTEN_STRATEGY" in @@ -609,19 +609,25 @@ prompt_dir() { current_path=$(truncatePathFromRight "$(pwd | sed -e "s,^$HOME,~,")" ) fi ;; - truncate_with_root_marker) - local dir_truncate_root + truncate_with_folder_marker) + local last_marked_folder marked_folder zero + set_default POWERLEVEL9K_SHORTEN_FOLDER_MARKER ".shorten_folder_marker" + + for marked_folder in $(upsearch $POWERLEVEL9K_SHORTEN_FOLDER_MARKER); do + if [[ "$marked_folder" == "/" ]]; then + current_path="/" + elif [[ "$marked_folder" == "$HOME" ]]; then + current_path="~" + elif [[ "${marked_folder%/*}" == $last_marked_folder ]]; then + current_path="${current_path%/}/${marked_folder##*/}" + else + current_path="${current_path%/}/$POWERLEVEL9K_SHORTEN_DELIMITER/${marked_folder##*/}" + fi + last_marked_folder=$marked_folder + done - dir_truncate_root=$(upsearch $POWERLEVEL9K_ROOT_MARKER_FILE) zero='%([BSUbfksu]|([FB]|){*})' - - if [[ "$dir_truncate_root" == "/" || "$dir_truncate_root" == "$HOME" || "${dir_truncate_root%/*}" == "$HOME" || ${dir_truncate_root%/*} == "/" ]]; then - current_path='%~' - elif [[ "$dir_truncate_root" == "$HOME"* ]]; then - current_path="~/$POWERLEVEL9K_SHORTEN_DELIMITER/${dir_truncate_root##*/}${PWD:${#${(S%%)dir_truncate_root//$~zero/}}}" - else - current_path="/$POWERLEVEL9K_SHORTEN_DELIMITER/${dir_truncate_root##*/}${PWD:${#${(S%%)dir_truncate_root//$~zero/}}}" - fi + current_path=$current_path${PWD:${#${(S%%)last_marked_folder//$~zero/}}} ;; *) current_path="%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c" -- cgit v1.2.3 From eb865664e4225b94fc01ce1c05f27d1db18e172d Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Thu, 2 Feb 2017 00:31:04 +0100 Subject: Add comments to the dir segment --- powerlevel9k.zsh-theme | 2 ++ 1 file changed, 2 insertions(+) (limited to 'powerlevel9k.zsh-theme') diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index 420f7d0b..723954be 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -615,8 +615,10 @@ prompt_dir() { for marked_folder in $(upsearch $POWERLEVEL9K_SHORTEN_FOLDER_MARKER); do if [[ "$marked_folder" == "/" ]]; then + # If we reached root folder, stop upsearch. current_path="/" elif [[ "$marked_folder" == "$HOME" ]]; then + # If we reached home folder, stop upsearch. current_path="~" elif [[ "${marked_folder%/*}" == $last_marked_folder ]]; then current_path="${current_path%/}/${marked_folder##*/}" -- cgit v1.2.3 From a4cb875615bedc305168c694793616de8d72c1b3 Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Sun, 12 Feb 2017 23:27:16 +0100 Subject: Add documentation about mysterious 'BSUbfksu' pattern --- powerlevel9k.zsh-theme | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'powerlevel9k.zsh-theme') diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index d51ec8f2..e6befc6d 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -591,7 +591,12 @@ prompt_dir() { package_path=${$(pwd)%%/.git*} fi - zero='%([BSUbfksu]|([FB]|){*})' + # Replace the shortest possible match of the marked folder from + # the current path. Remove the amount of characters up to the + # folder marker from the left. Count only the visible characters + # in the path (this is done by the "zero" pattern; see + # http://stackoverflow.com/a/40855342/5586433). + local 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 @@ -613,6 +618,9 @@ prompt_dir() { local last_marked_folder marked_folder zero set_default POWERLEVEL9K_SHORTEN_FOLDER_MARKER ".shorten_folder_marker" + # Search for the folder marker in the parent directories and + # buildup a pattern that is removed from the current path + # later on. for marked_folder in $(upsearch $POWERLEVEL9K_SHORTEN_FOLDER_MARKER); do if [[ "$marked_folder" == "/" ]]; then # If we reached root folder, stop upsearch. @@ -628,7 +636,12 @@ prompt_dir() { last_marked_folder=$marked_folder done - zero='%([BSUbfksu]|([FB]|){*})' + # Replace the shortest possible match of the marked folder from + # the current path. Remove the amount of characters up to the + # folder marker from the left. Count only the visible characters + # in the path (this is done by the "zero" pattern; see + # http://stackoverflow.com/a/40855342/5586433). + local zero='%([BSUbfksu]|([FB]|){*})' current_path=$current_path${PWD:${#${(S%%)last_marked_folder//$~zero/}}} ;; *) -- cgit v1.2.3 From f6c65e3cf7b87a07b7dffb0c3d77a6932241c242 Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Mon, 13 Feb 2017 00:18:34 +0100 Subject: Get rid of unreadable BSU-pattern Now the current folder in `truncate_with_folder_marker` strategy is truncated by cutting off the found folder from the beginning of $PWD. --- powerlevel9k.zsh-theme | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'powerlevel9k.zsh-theme') diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index e6befc6d..55e33680 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -615,7 +615,7 @@ prompt_dir() { fi ;; truncate_with_folder_marker) - local last_marked_folder marked_folder zero + local last_marked_folder marked_folder set_default POWERLEVEL9K_SHORTEN_FOLDER_MARKER ".shorten_folder_marker" # Search for the folder marker in the parent directories and @@ -637,12 +637,8 @@ prompt_dir() { done # Replace the shortest possible match of the marked folder from - # the current path. Remove the amount of characters up to the - # folder marker from the left. Count only the visible characters - # in the path (this is done by the "zero" pattern; see - # http://stackoverflow.com/a/40855342/5586433). - local zero='%([BSUbfksu]|([FB]|){*})' - current_path=$current_path${PWD:${#${(S%%)last_marked_folder//$~zero/}}} + # the current path. + current_path=$current_path${PWD#${last_marked_folder}*} ;; *) current_path="%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c" -- cgit v1.2.3