aboutsummaryrefslogtreecommitdiffstats
path: root/examples/scripts.v2/cdhist.bash
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scripts.v2/cdhist.bash')
-rw-r--r--examples/scripts.v2/cdhist.bash176
1 files changed, 0 insertions, 176 deletions
diff --git a/examples/scripts.v2/cdhist.bash b/examples/scripts.v2/cdhist.bash
deleted file mode 100644
index df8aea7..0000000
--- a/examples/scripts.v2/cdhist.bash
+++ /dev/null
@@ -1,176 +0,0 @@
-#! /bin/bash
-#
-# cdhist - cd replacement with a directory stack like pushd/popd
-#
-# usage: cd [-l] [-n] [-] [dir]
-#
-# options:
-# -l print the cd directory stack, one entry per line
-# - equivalent to $OLDPWD
-# -n cd to nth directory in cd directory stack
-# -s cd to first directory in stack matching (substring) `s'
-#
-# arguments:
-# dir cd to dir and push dir onto the cd directory stack
-#
-# If the new directory is a directory in the stack and the options selected
-# it (-n, -s), the new working directory is printed
-#
-# If the variable CDHISTFILE is set, the cd directory stack is loaded from
-# and written to $CDHISTFILE every time `cd' is executed.
-#
-# Note: I got this off the net somewhere; I don't know the original author
-#
-# Chet Ramey
-# chet@po.cwru.edu
-
-_cd_print()
-{
- echo -e "$@"
-}
-
-cd()
-{
- typeset -i cdlen i
- typeset t
-
- if [ $# -eq 0 ]
- then
- set -- $HOME
- fi
-
- if [ "$CDHISTFILE" ] && [ -r "$CDHISTFILE" ] # if directory history exists
- then
- typeset CDHIST
- i=-1
- while read -r t # read directory history file
- do
- CDHIST[i=i+1]=$t
- done <$CDHISTFILE
- fi
-
- if [ "${CDHIST[0]}" != "$PWD" ] && [ -n "$PWD" ]
- then
- _cdins # insert $PWD into cd history
- fi
-
- cdlen=${#CDHIST[*]} # number of elements in history
-
- case "$@" in
- -) # cd to new dir
- if [ "$OLDPWD" = "" ] && ((cdlen>1))
- then
- '_cdprint' ${CDHIST[1]}
- builtin cd ${CDHIST[1]}
- pwd
- else
- builtin cd "$@"
- # pwd
- fi
- ;;
- -l) # _cdprint directory list
- ((i=cdlen))
- while (((i=i-1)>=0))
- do
- num=$i
- '_cdprint' "$num ${CDHIST[i]}"
- done
- return
- ;;
- -[0-9]|-[0-9][0-9]) # cd to dir in list
- if (((i=${1#-})<cdlen))
- then
- '_cdprint' ${CDHIST[i]}
- builtin cd ${CDHIST[i]}
- pwd
- else
- builtin cd $@
- # pwd
- fi
- ;;
- -*) # cd to matched dir in list
- t=${1#-}
- i=1
- while ((i<cdlen))
- do
- case ${CDHIST[i]} in
- *$t*)
- '_cdprint' ${CDHIST[i]}
- builtin cd ${CDHIST[i]}
- pwd
- break
- ;;
- esac
- ((i=i+1))
- done
- if ((i>=cdlen))
- then
- builtin cd $@
- # pwd
- fi
- ;;
- *) # cd to new dir
- builtin cd $@
- # pwd
- ;;
- esac
-
- _cdins # insert $PWD into cd history
-
- if [ "$CDHISTFILE" ]
- then
- cdlen=${#CDHIST[*]} # number of elements in history
-
- i=0
- while ((i<cdlen))
- do
- echo ${CDHIST[i]} # update directory history
- ((i=i+1))
- done >$CDHISTFILE
- fi
-}
-
-_cdins() # insert $PWD into cd history
-{ # meant to be called only by cd
- typeset -i i
-
- i=0
-
- while (( i < ${#CDHIST[*]} )) # see if dir is already in list
- do
- if [ "${CDHIST[$i]}" = "$PWD" ]
- then
- break
- fi
- ((i=i+1))
- done
-
- if (( i>22 )) # limit max size of list
- then
- i=22
- fi
-
- while (((i=i-1)>=0)) # bump old dirs in list
- do
- CDHIST[i+1]=${CDHIST[i]}
- done
-
- CDHIST[0]=$PWD # insert new directory in list
-}
-
-# examples
-shopt -s expand_aliases
-
-# go to known place before doing anything
-cd /
-
-echo CDHIST: "${CDHIST[@]}"
-for dir in /tmp /bin - -2 -l
-do
- cd $dir
- echo CDHIST: "${CDHIST[@]}"
- echo PWD: $PWD
-
-done
-
-exit 0