From f3b379dcdde48b80dc59664616157d4e38f6c447 Mon Sep 17 00:00:00 2001 From: kj_sh604 Date: Sun, 28 Dec 2025 23:23:02 -0500 Subject: refactor: better fish-style pwd for zsh --- .../kj_sh604-with-attempt-at-fish-style-pwd.zsh | 45 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/.config/shell/git-prompts/kj_sh604-with-attempt-at-fish-style-pwd.zsh b/.config/shell/git-prompts/kj_sh604-with-attempt-at-fish-style-pwd.zsh index 8584150..d704782 100644 --- a/.config/shell/git-prompts/kj_sh604-with-attempt-at-fish-style-pwd.zsh +++ b/.config/shell/git-prompts/kj_sh604-with-attempt-at-fish-style-pwd.zsh @@ -18,4 +18,47 @@ ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[blue]%}U" ZSH_THEME_GIT_PROMPT_STASHED="%{$fg[blue]%}☐" ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓" -PROMPT=$'%F{cyan}${${${:-$(printf "/%.1s" ${(s./.)PWD:h})/${PWD:t}}/\\/\\///}//\\%/%%}%f %F{242}$(gitprompt)%f%(12V.%F{242}%12v%f .)%(?.%F{white}.%F{white})%%%f ' +__fish_pwd() { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == "~" ]]; then + echo "~" + return + fi + + local -a parts + + parts=("${(@s:/:)pwd}") + + if [[ -z "${parts[1]}" ]]; then + parts=("${parts[@]:1}") + local prefix="/" + else + local prefix="" + fi + + if (( ${#parts[@]} <= 1 )); then + echo "${prefix}${parts[1]}" + return + fi + + local result="" + local i + + for (( i=1; i < ${#parts[@]}; i++ )); do + local part="${parts[$i]}" + if [[ "$part" == "~" ]]; then + result+="~/" + elif [[ "$part" == .* ]]; then + result+="${part:0:2}/" + else + result+="${part:0:1}/" + fi + done + + result+="${parts[-1]}" + + echo "${prefix}${result}" +} + +PROMPT=$'%F{cyan}$(__fish_pwd)%f %F{242}$(gitprompt)%f%(12V.%F{242}%12v%f .)%(?.%F{white}.%F{white})%%%f ' \ No newline at end of file -- cgit v1.2.3