aboutsummaryrefslogtreecommitdiff
path: root/internal/p10k.zsh
diff options
context:
space:
mode:
authorromkatv <roman.perepelitsa@gmail.com>2019-09-04 09:40:24 +0300
committerromkatv <roman.perepelitsa@gmail.com>2019-09-04 09:40:24 +0300
commitb394a601a0cb5fcf364dc86445225764f4ba149a (patch)
tree7bb611eaf4f284c259e357ec80acebace84be0d1 /internal/p10k.zsh
parent4d63712093f33eb3224f560f6bc9dcb9c9909eb5 (diff)
if auto_name_dirs is set, show directory without named directory support
Diffstat (limited to 'internal/p10k.zsh')
-rwxr-xr-xinternal/p10k.zsh52
1 files changed, 29 insertions, 23 deletions
diff --git a/internal/p10k.zsh b/internal/p10k.zsh
index aaea53ec..e28bf616 100755
--- a/internal/p10k.zsh
+++ b/internal/p10k.zsh
@@ -1169,30 +1169,37 @@ function _p9k_shorten_delim_len() {
################################################################
# Dir: current working directory
prompt_dir() {
- (( _POWERLEVEL9K_DIR_PATH_ABSOLUTE )) && local p=$_p9k_pwd || local p=${(%):-%~}
-
- if [[ $p == '~['* ]]; then
- # If "${(%):-%~}" expands to "~[a]/]/b", is the first component "~[a]" or "~[a]/]"?
- # One would expect "${(%):-%-1~}" to give the right answer but alas it always simply
- # gives the segment before the first slash, which would be "~[a]" in this case. Worse,
- # for "~[a/b]" it'll give the nonsensical "~[a". To solve this problem we have to
- # repeat what "${(%):-%~}" does and hope that it produces the same result.
- local func=''
- local -a parts=()
- for func in zsh_directory_name $zsh_directory_name_functions; do
- if (( $+functions[$func] )) && $func d $_p9k_pwd && [[ $p == '~['$reply[1]']'* ]]; then
- parts+='~['$reply[1]']'
- break
+ if (( _POWERLEVEL9K_DIR_PATH_ABSOLUTE )); then
+ local p=$_p9k_pwd
+ local -a parts=("${(s:/:)p}")
+ elif [[ -o auto_name_dirs ]]; then
+ local p=${_p9k_pwd/#(#b)$HOME(|\/*)/'~'$match[1]}
+ local -a parts=("${(s:/:)p}")
+ else
+ local p=${(%):-%~}
+ if [[ $p == '~['* ]]; then
+ # If "${(%):-%~}" expands to "~[a]/]/b", is the first component "~[a]" or "~[a]/]"?
+ # One would expect "${(%):-%-1~}" to give the right answer but alas it always simply
+ # gives the segment before the first slash, which would be "~[a]" in this case. Worse,
+ # for "~[a/b]" it'll give the nonsensical "~[a". To solve this problem we have to
+ # repeat what "${(%):-%~}" does and hope that it produces the same result.
+ local func=''
+ local -a parts=()
+ for func in zsh_directory_name $zsh_directory_name_functions; do
+ if (( $+functions[$func] )) && $func d $_p9k_pwd && [[ $p == '~['$reply[1]']'* ]]; then
+ parts+='~['$reply[1]']'
+ break
+ fi
+ done
+ if (( $#parts )); then
+ parts+=(${(s:/:)${p#$parts[1]}})
+ else
+ p=$_p9k_pwd
+ parts=("${(s:/:)p}")
fi
- done
- if (( $#parts )); then
- parts+=(${(s:/:)${p#$parts[1]}})
else
- p=$_p9k_pwd
- parts=("${(s:/:)p}")
+ local -a parts=("${(s:/:)p}")
fi
- else
- local -a parts=("${(s:/:)p}")
fi
local -i fake_first=0 expand=0
@@ -1363,7 +1370,7 @@ prompt_dir() {
[[ $_POWERLEVEL9K_DIR_SHOW_WRITABLE == 1 && ! -w $_p9k_pwd ]]
local w=$?
- if ! _p9k_cache_get $0 $_p9k_pwd $w $fake_first "${parts[@]}"; then
+ if ! _p9k_cache_get $0 $_p9k_pwd $p $w $fake_first "${parts[@]}"; then
local state=$0
local icon=''
if (( ! w )); then
@@ -4100,7 +4107,6 @@ _p9k_must_init() {
IFS=$'\1' param_sig="${(@)param_keys:/(#b)(*)/$match[1]=\$$match[1]}"
IFS=$'\2' eval "param_sig=x\"$param_sig\""
[[ -o transient_rprompt ]] && param_sig+=t
- [[ -o auto_name_dirs ]] && param_sig+=d
[[ $param_sig == $_p9k_param_sig ]] && return 1
[[ -n $_p9k_param_sig ]] && _p9k_deinit
_p9k_param_sig=$param_sig