Move the ... functions to a new file
# Customized version from Frank Terbeck' scripts
# http://bewatermyfriend.org/p/2011/013/
# "." will display the current working directory
# ".." will get you 1 directory up,
# "..." will get you 2 directories up, etc.
function ft_accept_line_cd_up() {
setopt local_options extended_glob
local -a cmdline
cmdline=( ${(z)BUFFER} )
if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == "." ]] ; then
BUFFER="pwd"
zle ".$WIDGET"
return
fi
if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == ..## ]] ; then
BUFFER='cd '
for (( i = 2; i <= ${#${cmdline[1]}}; i++ )); do
BUFFER="${BUFFER}../"
done
BUFFER=${BUFFER%/}
fi
zle ".$WIDGET"
}
zle -N accept-line ft_accept_line_cd_up
# 2nd part, completion support...
function ft_complete_with_dots() {
setopt local_options extended_glob
local -a cmdline
cmdline=( ${(z)BUFFER} )
if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == ..## ]] ; then
BUFFER='cd '
for (( i = 2; i <= ${#${cmdline[1]}}; i++ )); do
BUFFER="${BUFFER}../"
done
CURSOR=${#BUFFER}
fi
zle ".$WIDGET"
}
# Disabling for now as I don't know how to fallback to automatic correction...
#zle -N expand-or-complete ft_complete_with_dots