aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/completions/cd.fish
diff options
context:
space:
mode:
Diffstat (limited to 'share/completions/cd.fish')
-rw-r--r--share/completions/cd.fish39
1 files changed, 39 insertions, 0 deletions
diff --git a/share/completions/cd.fish b/share/completions/cd.fish
new file mode 100644
index 00000000..93eadcb7
--- /dev/null
+++ b/share/completions/cd.fish
@@ -0,0 +1,39 @@
+
+function __fish_complete_cd -d "Completions for the cd command"
+
+ #
+ # We can't simply use __fish_complete_directory because of the CDPATH
+ #
+
+ set -- wd $PWD
+ set -- owd $OLDPWD
+
+ # Check if CDPATH is set
+
+ set -l mycdpath
+
+ if test -z $CDPATH[1]
+ set mycdpath .
+ else
+ set mycdpath $CDPATH
+ end
+
+ if echo (commandline -ct)|grep '^/\|./' >/dev/null
+ # This is an absolute search path
+ eval printf '\%s\\tDirectory\\n' (commandline -ct)\*/
+ else
+ # This is a relative search path
+ # Iterate over every directory in CDPATH and check for possible completions
+ for i in $mycdpath
+ # Move to the initial directory first, in case the CDPATH directory is relative
+ builtin cd $wd
+ builtin cd $i
+ eval printf '"%s\tDirectory in "'$i'"\n"' (commandline -ct)\*/
+ end
+ end
+
+ builtin cd $wd
+ set -- OLDPWD $owd
+end
+
+complete -x -c cd -a "(__fish_complete_cd)"