mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-29 14:23:09 +00:00
11a60c8374
I hate doing this but I am tired of touching a fish script as part of some change and having `make style` radically change it. Which makes editing fish scripts more painful than it needs to be. It is time to do a wholesale reformatting of these scripts to conform to the documented style as implemented by the `fish_indent` program.
36 lines
1.5 KiB
Fish
36 lines
1.5 KiB
Fish
function __fish_complete_cd -d "Completions for the cd command"
|
|
set -l token (commandline -ct)
|
|
# Absolute path or explicitly from the current directory - no descriptions and no CDPATH
|
|
if string match -qr '^\.?\.?/.*' -- $token
|
|
for d in $token*/
|
|
# Check if it's accessible - the glob only matches directories
|
|
[ -x $d ]
|
|
and printf "%s\n" $d
|
|
end
|
|
else # Relative path - check $CDPATH and use that as description
|
|
set -l cdpath $CDPATH
|
|
[ -z "$cdpath" ]
|
|
and set cdpath "."
|
|
# Remove the real path to "." (i.e. $PWD) from cdpath if we're in it
|
|
# so it doesn't get printed in the descriptions
|
|
if set -l ind (contains -i -- $PWD $cdpath)
|
|
and contains -- "." $cdpath
|
|
set -e cdpath[$ind]
|
|
end
|
|
# TODO: There's a subtlety regarding descriptions - if $cdpath[1]/foo and $cdpath[2]/foo exist, we print both
|
|
# but want the first description to win - this currently works, but is not guaranteed
|
|
for i in $cdpath
|
|
set -l desc
|
|
# Don't show description for current directory
|
|
# and replace $HOME with "~"
|
|
[ $i = "." ]
|
|
or set -l desc (string replace -r -- "^$HOME" "~" "$i")
|
|
# This assumes the CDPATH component itself is cd-able
|
|
for d in $i/$token*/
|
|
# Remove the cdpath component again
|
|
[ -x $d ]
|
|
and printf "%s\t%s\n" (string replace -r "^$i/" "" -- $d) $desc
|
|
end
|
|
end
|
|
end
|
|
end
|