aboutsummaryrefslogtreecommitdiff
path: root/sh/shrc.d/xd.sh
blob: 40319cf2285a40e571ccda2ba8a9ecb42bcfad1c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Swap current directory with marked directory
xd() {

    # Refuse to deal with unwanted arguments
    if [ "$#" -gt 0 ] ; then
        printf >&2 'gd(): Unspecified argument\n'
        return 2
    fi

    # Complain if mark not actually set yet
    if ! [ -n "$PMD" ] ; then
        printf >&2 'gd(): Mark not set\n'
        return 1
    fi

    # Put the current and marked directories into positional params
    set -- "$PMD" "$PWD"

    # Try to change into the marked directory
    cd -- "$1" || return
    
    # If that worked, we can swap the mark, and we're done
    PMD=$2
}