Realized that recent changes deserve a new version number.
[selector.git] / bash-selector.sh
index 6706c04..d338487 100755 (executable)
 #  You should have received a copy of the GNU General Public License
 #  along with selector.  If not, see <http://www.gnu.org/licenses/>.
 
-#  This script installs two key-bindings:
+#  This bash script adds two key bindings:
 #
-#  Alt-r for selector-based command history
+#  Alt-r to access a selector-based command history
 #
-#  Alt-c for selector-based directoy history
+#  Alt-c to access a selector-based directory history
 #
 #  Note that you have to call it with "source bash-selector.sh"
-#  otherwise the key-bindings will not be effective in your current
+#  otherwise the key bindings will not be effective in your current
 #  bash
 
 if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
@@ -52,7 +52,7 @@ function selector-history () {
 
 export SELECTOR_CD_HISTORY
 
-[[ "${SELECTOR_CD_HISTORY}" ]] || SELECTOR_CD_HISTORY=${HOME}/.selector-cd-history
+[[ "${SELECTOR_CD_HISTORY}" ]] || SELECTOR_CD_HISTORY="${HOME}/.selector-cd-history"
 
 export SELECTOR_CD_HISTORY_SIZE
 
@@ -61,6 +61,7 @@ export SELECTOR_CD_HISTORY_SIZE
 # The function to use in place of the standard "cd"
 
 function selector-cd () {
+    local UMASK=$(umask)
     umask 077
 
     if [[ -z "$1" ]]; then
@@ -71,15 +72,17 @@ function selector-cd () {
 
     if [[ -f "${SELECTOR_CD_HISTORY}" ]]; then
         TMP=$(mktemp /tmp/selector-cd.XXXXXX)
-        tail -$((SELECTOR_CD_HISTORY_SIZE-1)) < "${SELECTOR_CD_HISTORY}" > "${TMP}"
-        cat "${TMP}" > "${SELECTOR_CD_HISTORY}"
+        tail -$((SELECTOR_CD_HISTORY_SIZE-1)) < "${SELECTOR_CD_HISTORY}" >| "${TMP}" && \
+            cat "${TMP}" >| "${SELECTOR_CD_HISTORY}"
         \rm -f "${TMP}"
     fi
 
     echo "${PWD}" | sed -e "s!^${HOME}!~!" >> "${SELECTOR_CD_HISTORY}"
+    umask ${UMASK}
 }
 
 function selector-cd-search () {
+    local UMASK=$(umask)
     umask 077
 
     if [[ -f "${SELECTOR_CD_HISTORY}" ]]; then
@@ -93,12 +96,13 @@ function selector-cd-search () {
     else
         echo "No cd history file '${SELECTOR_CD_HISTORY}'." >&2
     fi
+    umask ${UMASK}
 }
 
 alias cd=selector-cd
 
 ######################################################################
-# The key-bindings themselves
+# The key bindings themselves
 ######################################################################
 
 # M-t appends the selected history line and the end of the current
@@ -112,12 +116,12 @@ if [[ "$1" ]]; then
 
             --hist)
                 # M-r puts the selected history line in place of the current one
-                bind '"\C-[r":"\C-a\C-kselector-history\C-m"'
+                bind '"\C-[r":"\C-a\C-k selector-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"'
+                bind '"\C-[c":"\C-a\C-k selector-cd-search\C-m"'
                 ;;
 
             *)
@@ -131,9 +135,9 @@ if [[ "$1" ]]; then
 
 else
 
-    echo "source bash-selector.sh <--hist|--cd> [...]"
+    echo "source bash-selector.sh [--hist] [--cd]"
     echo
-    echo "Defines bash functions, and installs key-bindings and aliases to use selector"
+    echo "Defines bash functions, and installs key bindings and aliases to use selector"
     echo "for history search with M-r and/or intelligent cd history with M-c."
 
 fi