+
+ echo "**"
+ echo "** Scanning to ${HOME}/scan-${n}.jpg"
+ echo "**"
+
+ SCANNER=$(scanimage -L | grep "Canon LiDE 60" | sed -e "s/^.*\`\(.*\)'.*$/\1/")
+
+ scanimage -d ${SCANNER} \
+ --format=pnm \
+ --mode=color \
+ --depth=8 \
+ -v \
+ --resolution=300 \
+ ${OPTS} | \
+ convert -rotate 180 - "${HOME}/scan-${n}.jpg"
+
+ echo "** Done".
+}
+
+# A password generator
+
+function genpw () {
+ if [[ "$1" == "-e" ]]
+ then
+ PW=$(tr -dc A-Z0-9 < /dev/urandom | head -c6)
+ shift
+ else
+ PW=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c16)
+ fi
+ if [[ ! "$1" == "-s" ]]
+ then
+ echo "$(date) ${PW}" >> ${HOME}/private/genpw.log
+ fi
+ echo ${PW}
+ # tr -dc [:graph:] < /dev/urandom | head -c16
+ echo
+}
+
+function ua () {
+
+ [[ "$1" ]] || ( echo "Universal unarchive: ua <file> [<file> ...]" >&2 && return 1)
+
+ while [[ "$1" ]]
+ do
+
+ case "$1" in
+ *.tgz|*.tar.gz|*.tbz|*.tar.bz2)
+ tar xvf "$1"
+ ;;
+
+ *.rar)
+ unrar -kb x "$1"
+ ;;
+
+ *.zip)
+ unzip "$1"
+ ;;
+
+ *)
+ echo "Unknown file extension $1"
+ ;;
+ esac
+
+ shift
+
+ done
+}
+
+# Create a dir and cd there
+
+function mcd () {
+ mkdir -vp "$1"
+ cd "$1"
+}
+
+# Capture the screen in a dated png
+
+function cap () {
+ if [[ $2 ]]
+ then
+ name=$2
+ else
+ name="capture-$(date +%Y%m%d-%H%M%S).png"
+ fi
+
+ if [[ "$1" ]]
+ then
+ echo "Waiting $1 s and saving to ${name}."
+ sleep "$1"
+ else
+ echo "Saving to ${name}."
+ fi
+
+ echo "Please click on the window to capture."
+ xwd | convert xwd:- ${name}
+ \ls -l ${name}
+}
+
+# Create and CD in a /tmp/tmp.XXXXXX directory. With the '-'
+# arguments, do not create one and CD in the most recent instead
+
+function cdt () {
+ if [[ "$1" ]]
+ then
+ if [[ "$1" == "-" ]]
+ then
+ cd $(\ls -td /tmp/tmp.?????? | head -1)
+ else
+ echo "USAGE: cdt [-]" >&2
+ return 1
+ fi
+ else
+ dir=$(mktemp -d /tmp/tmp.XXXXXX)
+ link=/tmp/tmp
+ if [[ -h ${link} ]]
+ then
+ \rm ${link}
+ fi
+ if [[ ! -a ${link} ]]
+ then
+ ln -s ${dir} ${link}
+ fi
+ cd ${dir}
+ fi
+}
+
+alias t='cd /tmp'
+alias a='cd /tmp/at'
+
+function trash () {
+
+ [[ "${TRASH_LATER_ROOT}" ]] || TRASH_LATER_ROOT="${HOME}/.trash"
+
+ if [[ "$1" == "--" ]]
+ then
+ shift
+ elif [[ "$1" == "-l" ]]
+ then
+ shift
+ echo "Trashin in 3 months"
+ TRASH_DIR="${TRASH_LATER_ROOT}/remove-after-$(date --date='+3 months' +%Y-%b-%d)"
+ mkdir -p "${TRASH_DIR}"
+ else
+ TRASH_DIR=$(date +/tmp/trash-${USER}-%Y-%b-%d-%Hh)
+ LINK=/tmp/trash
+ mkdir -p ${TRASH_DIR}
+ [[ -h ${LINK} ]] && \rm ${LINK}
+ [[ ! -f ${LINK} ]] && ln -s ${TRASH_DIR} ${LINK}
+ fi
+
+ mv "$@" "${TRASH_DIR}"
+ echo "Trashed $@"
+}
+
+function trashlatex () {
+ TRASH=$(date +/tmp/trash-latex-${USER}-%Y-%b-%d-%Hh)
+ LINK=/tmp/trash
+
+ mkdir -p ${TRASH}
+
+ [[ -h ${LINK} ]] && \rm ${LINK}
+
+ [[ ! -f ${LINK} ]] && ln -s ${TRASH} ${LINK}
+
+ mv -v \
+ *.log *.pdf *.aux *.nav *.pdfpc *.snm *.toc *.out \
+ *.bbl *.blg \
+ *.*.table *.*.gnuplot \
+ ${TRASH}