home-config/fish/functions/_tide_pwd.fish
13038d117b517c11271a4a3c1d2d4fd129893d0a
· 2.0 KB · 42 lines
raw
| 1 | set_color -o $tide_pwd_color_anchors | read -l color_anchors |
| 2 | set_color $tide_pwd_color_truncated_dirs | read -l color_truncated |
| 3 | set -l reset_to_color_dirs (set_color normal -b $tide_pwd_bg_color; set_color $tide_pwd_color_dirs) |
| 4 | |
| 5 | set -l unwritable_icon $tide_pwd_icon_unwritable' ' |
| 6 | set -l home_icon $tide_pwd_icon_home' ' |
| 7 | set -l pwd_icon $tide_pwd_icon' ' |
| 8 | |
| 9 | eval "function _tide_pwd |
| 10 | if set -l split_pwd (string replace -r '^$HOME' '~' -- \$PWD | string split /) |
| 11 | test -w . && set -f split_output \"$pwd_icon\$split_pwd[1]\" \$split_pwd[2..] || |
| 12 | set -f split_output \"$unwritable_icon\$split_pwd[1]\" \$split_pwd[2..] |
| 13 | set split_output[-1] \"$color_anchors\$split_output[-1]$reset_to_color_dirs\" |
| 14 | else |
| 15 | set -f split_output \"$home_icon$color_anchors~\" |
| 16 | end |
| 17 | |
| 18 | string join / -- \$split_output | string length -V | read -g _tide_pwd_len |
| 19 | |
| 20 | i=1 for dir_section in \$split_pwd[2..-2] |
| 21 | string join -- / \$split_pwd[..\$i] | string replace '~' $HOME | read -l parent_dir # Uses i before increment |
| 22 | |
| 23 | math \$i+1 | read i |
| 24 | |
| 25 | if path is \$parent_dir/\$dir_section/\$tide_pwd_markers |
| 26 | set split_output[\$i] \"$color_anchors\$dir_section$reset_to_color_dirs\" |
| 27 | else if test \$_tide_pwd_len -gt \$dist_btwn_sides |
| 28 | string match -qr \"(?<trunc>\..|.)\" \$dir_section |
| 29 | |
| 30 | set -l glob \$parent_dir/\$trunc*/ |
| 31 | set -e glob[(contains -i \$parent_dir/\$dir_section/ \$glob)] # This is faster than inverse string match |
| 32 | |
| 33 | while string match -qr \"^\$parent_dir/\$(string escape --style=regex \$trunc)\" \$glob && |
| 34 | string match -qr \"(?<trunc>\$(string escape --style=regex \$trunc).)\" \$dir_section |
| 35 | end |
| 36 | test -n \"\$trunc\" && set split_output[\$i] \"$color_truncated\$trunc$reset_to_color_dirs\" && |
| 37 | string join / \$split_output | string length -V | read _tide_pwd_len |
| 38 | end |
| 39 | end |
| 40 | |
| 41 | string join -- / \"$reset_to_color_dirs\$split_output[1]\" \$split_output[2..] |
| 42 | end" |