+######################################################################
+# A ls with memory to notice what files have been added/removed from
+# the current directory
+
+function lsn () {
+ LSN_MEMORY=".lsn-state"
+
+ if [[ $1 == "--mem" ]] || [[ "$1" == "-m" ]]; then
+
+ \ls -pa | sort > ${LSN_MEMORY}
+ echo "State updated." >&2
+
+ elif [[ $1 == "+" ]]; then
+
+ shift
+
+ TMP=$(mktemp /tmp/lsn.XXXXXX)
+ \ls -d $* > ${TMP}
+ cat ${LSN_MEMORY} >> ${TMP}
+ sort -u ${TMP} > ${LSN_MEMORY}
+ \rm ${TMP}
+
+ elif [[ -n "$1" ]]; then
+
+ echo "lsn [--mem|-m] [+ <file> ...]" >&2
+ return 1
+
+ else
+
+ if [[ -f ${LSN_MEMORY} ]]; then
+ TMP=$(mktemp /tmp/lsn.XXXXXX)
+ \ls -pa | sort > ${TMP}
+ if diff > /dev/null ${TMP} ${LSN_MEMORY}; then
+ echo "${VT_GREEN_FG}${VT_BOLD}No change${VT_RESET}"
+ else
+ \comm -1 -3 ${LSN_MEMORY} ${TMP}
+ \comm -2 -3 ${LSN_MEMORY} ${TMP} | while read line; do
+ echo "${VT_RED_FG}${VT_BOLD}${line}${VT_RESET} (missing)"
+ done
+ fi
+ \rm ${TMP}
+ else
+ echo "No lsn state here." >&2
+ return 1
+ fi
+
+ fi
+}
+