Added options + a check that the it is being sourced.
authorFrancois Fleuret <francois@fleuret.org>
Mon, 21 Nov 2011 07:41:15 +0000 (08:41 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Mon, 21 Nov 2011 07:41:15 +0000 (08:41 +0100)
bash-selector.sh

index 89a4a43..da5bf93 100755 (executable)
 #
 # Alt-c for selector-based directoy history
 #
-# Note that you have to call it with ". bash-selector.sh" otherwise
-# the key-bindings will not be effective in your current bash
+# Note that you have to call it with "source bash-selector.sh"
+# otherwise the key-bindings will not be effective in your current
+# bash
+
+if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
+    echo "This script must be called with 'source $(basename $0)'" >&2
+    exit 1
+fi
 
 ######################################################################
 # Selector-based command history
@@ -52,11 +58,15 @@ function selector-cd () {
     else
         cd "$@"
     fi
-    TMP=$(mktemp /tmp/selector-cd.XXXXXX)
-    tail -1000 < ${SELECTOR_CD_HISTORY} > ${TMP}
-    echo $PWD | sed -e "s!^${HOME}!~!" >> ${TMP}
-    cat ${TMP} > ${SELECTOR_CD_HISTORY}
-    rm -f ${TMP}
+
+    if [[ -f ${SELECTOR_CD_HISTORY} ]]; then
+        TMP=$(mktemp /tmp/selector-cd.XXXXXX)
+        tail -999 < ${SELECTOR_CD_HISTORY} > ${TMP}
+        cat ${TMP} > ${SELECTOR_CD_HISTORY}
+        rm -f ${TMP}
+    fi
+
+    echo $PWD | sed -e "s!^${HOME}!~!" >> ${SELECTOR_CD_HISTORY}
 }
 
 function selector-cd-search () {
@@ -75,13 +85,45 @@ alias cd=selector-cd
 # The key-bindings themselves
 ######################################################################
 
-# M-r puts the selected history line in place of the current one
+    # M-t appends the selected history line and the end of the current
+    # one bind '"\C-[t":"\C-a\C-kselector-history\C-m\C-a\C-y\C-e"'
+
+if [[ "$1" ]]; then
+
+    while [[ "$1" ]]; do
+
+        case "$1" in
+
+            --hist)
+
+                # M-r puts the selected history line in place of the current one
+
+                bind '"\C-[r":"\C-a\C-kselector-history\C-m"'
+
+                ;;
+
+            --cd)
+
+                # M-c provides a dynamic list of directories to cd into
+
+                bind '"\C-[c":"\C-a\C-kselector-cd-search\C-m"'
+                ;;
+
+
+            *)
+                echo "Unknown argument $1" >&2
+                ;;
+        esac
+
+        shift
 
-bind '"\C-[r":"\C-a\C-kselector-history\C-m"'
+    done
 
-# M-t appends the selected history line and the end of the current one
-# bind '"\C-[t":"\C-a\C-kselector-history\C-m\C-a\C-y\C-e"'
+else
 
-# M-c provides a dynamic list of directories to cd into
+    echo "source bash-selector.sh <--hist|--cd> [...]"
+    echo
+    echo "Define bash function to use selector for history search and/or intelligent"
+    echo "cd history."
 
-bind '"\C-[c":"\C-a\C-kselector-cd-search\C-m"'
+fi