aboutsummaryrefslogtreecommitdiff
path: root/bash/bashrc.d
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2016-08-20 14:15:58 +1200
committerTom Ryder <tom@sanctum.geek.nz>2016-08-20 14:19:38 +1200
commit7e10222deeb3f53bebc6514ddfd6321a4ac4c894 (patch)
tree469dee5d6cf2e5d74616b955a23f5d7b18b1ab82 /bash/bashrc.d
parentPort pd() to POSIX sh (diff)
downloaddotfiles-7e10222deeb3f53bebc6514ddfd6321a4ac4c894.tar.gz
dotfiles-7e10222deeb3f53bebc6514ddfd6321a4ac4c894.zip
Port sd() to POSIX sh
Diffstat (limited to 'bash/bashrc.d')
-rw-r--r--bash/bashrc.d/sd.bash109
1 files changed, 0 insertions, 109 deletions
diff --git a/bash/bashrc.d/sd.bash b/bash/bashrc.d/sd.bash
deleted file mode 100644
index ad4a0deb..00000000
--- a/bash/bashrc.d/sd.bash
+++ /dev/null
@@ -1,109 +0,0 @@
-#
-# sd -- sibling/switch directory -- Shortcut to switch to another directory
-# with the same parent, i.e. a sibling of the current directory.
-#
-# $ pwd
-# /home/you
-# $ sd friend
-# $ pwd
-# /home/friend
-# $ sd you
-# $ pwd
-# /home/you
-#
-# If no arguments are given and there's only one other sibling, switch to that;
-# nice way to quickly toggle between two siblings.
-#
-# $ cd -- "$(mktemp -d)"
-# $ pwd
-# /tmp/tmp.ZSunna5Eup
-# $ mkdir a b
-# $ ls
-# a b
-# $ cd a
-# pwd
-# /tmp/tmp.ZSunna5Eup/a
-# $ sd
-# $ pwd
-# /tmp/tmp.ZSunna5Eup/b
-# $ sd
-# $ pwd
-# /tmp/tmp.ZSunna5Eup/a
-#
-# Seems to work for symbolic links.
-#
-sd() {
-
- # For completeness' sake, we'll pass any options to cd
- local arg
- local -a opts
- for arg ; do
- case $arg in
- --)
- shift
- break
- ;;
- -*)
- shift
- opts[${#opts[@]}]=$arg
- ;;
- *)
- break
- ;;
- esac
- done
-
- # Set up local variable for the sibling to which we'll attempt to move,
- # assuming we find one
- local dirname
-
- # If we have one argument, it's easy, we just try to move to that one
- if (($# == 1)) ; then
- dirname=$1
-
- # If no argument, the user is lazy; if there's only one sibling, we'll do
- # what they mean and switch to it
- elif (($# == 0)) ; then
-
- # This subshell switches on globbing functions to try to find all the
- # current directory's siblings; it exits non-zero if it found anything
- # other than one
- if ! dirname=$(
- shopt -s dotglob extglob nullglob
- local -a siblings
-
- # Generate relative paths of all siblings
- siblings=(../!("${PWD##*/}")/)
-
- # Strip the trailing slash
- siblings=("${siblings[@]%/}")
-
- # Strip everything up to the basename
- siblings=("${siblings[@]##*/}")
-
- # If some number of siblings besides one, exit non-zero
- if ((${#siblings[@]} != 1)) ; then
- exit 1
- fi
-
- # Otherwise, just print it
- printf %s "${siblings[0]}"
-
- # This block is run if the subshell fails due to there not being a
- # single sibling
- ) ; then
- printf 'bash: %s: No single sibling directory\n' \
- "$FUNCNAME" >&2
- return 1
- fi
-
- # Any other number of arguments is a usage error; say so
- else
- printf 'bash: %s: usage: %s [DIR]\n' \
- "$FUNCNAME" "$FUNCNAME" >&2
- return 2
- fi
-
- # Try to change into the determined directory
- builtin cd "${opts[@]}" ../"$dirname"
-}