Extended go functionalies
This commit is contained in:
parent
2b2d09e2ae
commit
f6c3239846
@ -5,21 +5,26 @@ function go() {
|
|||||||
ARG1=$1; ARG2=$2; ARG3=$3;
|
ARG1=$1; ARG2=$2; ARG3=$3;
|
||||||
|
|
||||||
if [[ -z "$ARG1" ]]; then
|
if [[ -z "$ARG1" ]]; then
|
||||||
__func_head "[MODE] SITE TARGET_DIR"
|
__func_head "[MODE] SITE TARGET_DIR [..SLICE]"
|
||||||
__func_help "<up|down> [MODE] TARGET_DIR"
|
__func_help "up [MODE] TARGET_DIR"
|
||||||
|
__func_help "down [MODE] TARGET_DIR [..SLICE]"
|
||||||
echo
|
echo
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NAV=false;
|
NAV=false
|
||||||
case "$ARG1" in
|
case "$ARG1" in
|
||||||
p)
|
p)
|
||||||
|
shift
|
||||||
CC='pushd' ;;
|
CC='pushd' ;;
|
||||||
c)
|
c)
|
||||||
|
shift
|
||||||
CC='cd' ;;
|
CC='cd' ;;
|
||||||
e)
|
e)
|
||||||
|
shift
|
||||||
CC='echo' ;;
|
CC='echo' ;;
|
||||||
up|down)
|
up|down)
|
||||||
|
shift
|
||||||
NAV=true ;;
|
NAV=true ;;
|
||||||
*)
|
*)
|
||||||
CC='cd'
|
CC='cd'
|
||||||
@ -29,59 +34,86 @@ function go() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
if [ $NAV = true ]; then
|
if [ $NAV = true ]; then
|
||||||
__go_nav $ARG1 $ARG2 $ARG3
|
__go_nav $ARG1 $@
|
||||||
return 0;
|
return $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f ~/.go_conf ]]; then
|
if [[ -f ~/.go_conf ]]; then
|
||||||
source ~/.go_conf
|
source ~/.go_conf
|
||||||
else
|
else
|
||||||
echo "Cannot source config file"
|
echo "Cannot source config file"
|
||||||
return 1;
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SITE=$(ls $UDEV|grep -m 1 $ARG2)
|
SITE=$( ls "$UDEV" | grep -m 1 "$ARG2" )
|
||||||
if [[ -z "$SITE" ]]; then
|
if [[ -z "$SITE" ]]; then
|
||||||
echo "No such site: $ARG2"
|
echo "No such site: $ARG2"
|
||||||
ls $UDEV -1 | sed 's/^/ /g'
|
find "$UDEV/" -maxdepth 1 -type d | sed "s/^.\+\/\([^\/]\+\)\/\?$/ \1/g"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z "$ARG3" ]]; then
|
if [[ -z "$ARG3" ]]; then
|
||||||
$CC $UDEV/$SITE
|
$CC "$UDEV/$SITE"
|
||||||
return 0
|
return $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for LOC in ${LOCS[@]}
|
for ((i = 0; i < ${#LOCS[@]}; i++))
|
||||||
do
|
do
|
||||||
LOCATION=$(ls $UDEV/$SITE/$LOC/ 2> /dev/null | grep -m 1 $ARG3)
|
LOC=${LOCS[i]}
|
||||||
|
LOCATION=$(ls -d "$UDEV/$SITE/$LOC/*$ARGS3*/" 2> /dev/null )
|
||||||
if [[ -n "$LOCATION" ]]; then
|
if [[ -n "$LOCATION" ]]; then
|
||||||
LOCATION="$LOC/$LOCATION"
|
LOCATION="$LOC/$LOCATION"
|
||||||
break;
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# shift ARG2 ARG3
|
||||||
|
shift; shift
|
||||||
|
|
||||||
if [[ -n "$LOCATION" ]]; then
|
if [[ -n "$LOCATION" ]]; then
|
||||||
$CC $UDEV/$SITE/$LOCATION/
|
__dive $CC "$UDEV/$SITE/$LOCATION/" $@
|
||||||
return 0
|
return $?
|
||||||
else
|
else
|
||||||
echo "Location '$ARG3' not found under: $SITE"
|
__dive $CC "$UDEV/$SITE" "$ARG3" $@
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__dive() {
|
||||||
|
CC=$1
|
||||||
|
WDIR=$2
|
||||||
|
shift; shift
|
||||||
|
|
||||||
|
OIFS=$IFS
|
||||||
|
IFS="*"
|
||||||
|
PATT="*$**"
|
||||||
|
IFS=$OIFS
|
||||||
|
|
||||||
|
pushd "$WDIR" > /dev/null
|
||||||
|
DIR=$(find . -type d -path "$PATT" -print -quit | cut -c 3- )
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
|
if [[ -z $DIR ]]; then
|
||||||
|
echo "Path: $WDIR"
|
||||||
|
echo " - Pattern not found: $PATT"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return 1
|
$CC "$WDIR/$DIR"
|
||||||
}
|
}
|
||||||
|
|
||||||
__go_nav() {
|
__go_nav() {
|
||||||
ARG1=$1; ARG2=$2; ARG3=$3;
|
ARG1=$1; ARG2=$2; ARG3=$3;
|
||||||
case "$ARG2" in
|
case "$ARG2" in
|
||||||
p)
|
p)
|
||||||
|
shift
|
||||||
CC='pushd' ;;
|
CC='pushd' ;;
|
||||||
c|"")
|
c|"")
|
||||||
|
shift
|
||||||
CC='cd' ;;
|
CC='cd' ;;
|
||||||
e)
|
e)
|
||||||
|
shift
|
||||||
CC='echo' ;;
|
CC='echo' ;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
CC='cd'
|
CC='cd'
|
||||||
ARG3=$ARG2
|
ARG3=$ARG2
|
||||||
@ -89,39 +121,32 @@ __go_nav() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ "$ARG1" == "up" ]]; then
|
if [[ "$ARG1" == "up" ]]; then
|
||||||
|
OIFS=$IFS
|
||||||
IFS="/" read -a PWDA <<< "$(pwd)"
|
IFS="/" read -a PWDA <<< "$(pwd)"
|
||||||
|
IFS=$OIFS
|
||||||
|
|
||||||
MARK=0
|
MARK=0
|
||||||
NOT_FOUND=1
|
S_LEN=$(( ${#PWDA[@]} - 2 ))
|
||||||
LISTOF=''
|
for (( i=1; i<=$S_LEN; i++ ))
|
||||||
for i in "${!PWDA[@]}"
|
|
||||||
do
|
do
|
||||||
STACK=${PWDA[$i]}
|
STACK=${PWDA[$i]}
|
||||||
if [ -z "$STACK" ]; then
|
if [ -z "$STACK" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MARK=$i
|
|
||||||
|
|
||||||
if [ -n "$ARG3" ] && [[ "$STACK" =~ "$ARG3" ]]; then
|
if [ -n "$ARG3" ] && [[ "$STACK" =~ "$ARG3" ]]; then
|
||||||
unset NOT_FOUND
|
MARK=$i
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$STACK" ]]; then
|
|
||||||
LISTOF="$LISTOF\n $STACK";
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z "$ARG3" ]; then
|
if [ -z "$ARG3" ]; then
|
||||||
unset NOT_FOUND
|
# Go up 1 level
|
||||||
MARK=$(( $MARK - 1 ))
|
MARK=$(( ${#PWDA[@]} - 2 ))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$NOT_FOUND" ]; then
|
if [ $MARK -eq 0 ]; then
|
||||||
echo "No such token in up stack: $ARG3"
|
echo "No such token in up stack: $ARG3"
|
||||||
echo -e $LISTOF;
|
for (( i=1; i<=$S_LEN; i++ )); do echo " ${PWDA[$i]}"; done
|
||||||
echo
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -132,18 +157,10 @@ __go_nav() {
|
|||||||
DIR="$DIR${PWDA[$i]}/"
|
DIR="$DIR${PWDA[$i]}/"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
$CC "$DIR"
|
||||||
else
|
else
|
||||||
if [ -z "$ARG3" ]; then
|
shift
|
||||||
DIR=$(find . -maxdepth 1 -type d | head -n 2 | tail -n 1)
|
__dive $CC . $@
|
||||||
else
|
return $?
|
||||||
DIR=$(find . -type d -name '*'$ARG3'*')
|
|
||||||
if [[ -z $DIR ]]; then
|
|
||||||
|
|
||||||
echo "Directory not found: $ARG3"
|
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
$CC $DIR
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user