zshrc.d/30-functions-ftupdir.zrc
author Mikael Berthe <mikael@lilotux.net>
Sat, 14 Jul 2012 23:13:35 +0200
changeset 6 7671e95ab8b0
parent 5 5dbc9ebf690c
permissions -rw-r--r--
Change my local mkcd alias into a function I was grepping for my mkcd alias in the wrong terminal and found another version, which turned out to be a good thing as Frank's implementation looks better :) https://dev.0x50.de/projects/ftzsh/repository/revisions/master/entry/functions/mkcd


# 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