diff --git a/README.md b/README.md index fb58e7b..1c6fd38 100644 --- a/README.md +++ b/README.md @@ -53,11 +53,34 @@ To change to an aliased directory, type: goto ``` +To first push the current directory onto the directory stack before changing directories, type: +```bash +goto -p +``` +or +```bash +goto --push +``` + #### Example: ```bash goto dev ``` +### Revert to a pushed directory +To return to a pushed directory, type: +```bash +goto -o +``` +or +```bash +goto --pop +``` + +#### Notes + +This command is equivalent to `popd`, but within the `goto` command. + ### Register an alias To register a directory alias, type: ```bash diff --git a/goto.sh b/goto.sh index 291fc5f..2ca533b 100644 --- a/goto.sh +++ b/goto.sh @@ -47,6 +47,12 @@ goto() -u|--unregister) # Unregister an alias _goto_unregister_alias "$@" ;; + -p|--push) # Push the current directory onto the pushd stack, then goto + _goto_directory_push "$@" + ;; + -o|--pop) # Pop the top directory off of the pushd stack, then change that directory + _goto_directory_pop + ;; -l|--list) _goto_list_aliases ;; @@ -84,6 +90,10 @@ OPTIONS: goto -r|--register -u, --unregister: unregisters an alias goto -u|--unregister + -p, --push: pushes the current directory onto the stack, then performs goto + goto -p|--push + -o, --pop: pops the top directory from the stack, then changes to that directory + goto -o|--pop -l, --list: lists aliases goto -l|--list -x, --expand: expands an alias @@ -210,6 +220,25 @@ _goto_unregister_alias() echo "Alias '$1' unregistered successfully." } +# Pushes the current directory onto the stack, then goto +function _goto_directory_push() +{ + if [ "$#" -ne "1" ]; then + _goto_error "usage: goto -p|--push " + return + fi + + pushd . 2>&1 1>/dev/null + + _goto_directory $@ +} + +# Pops the top directory from the stack, then goto +function _goto_directory_pop() +{ + popd 2>&1 1>/dev/null +} + # Unregisters aliases whose directories no longer exist. _goto_cleanup() { @@ -292,7 +321,7 @@ _complete_goto_commands() local IFS=$' \t\n' # shellcheck disable=SC2207 - COMPREPLY=($(compgen -W "-r --register -u --unregister -l --list -x --expand -c --cleanup -v --version" -- "$1")) + COMPREPLY=($(compgen -W "-r --register -u --unregister -p --push -o --pop -l --list -x --expand -c --cleanup -v --version" -- "$1")) } # Completes the goto function with the available aliases @@ -350,6 +379,9 @@ _complete_goto_bash() elif [[ $prev = "-x" ]] || [[ $prev = "--expand" ]]; then # prompt with aliases if user tries to expand one _complete_goto_aliases "$cur" + elif [[ $prev = "-p" ]] || [[ $prev = "--push" ]]; then + # prompt with aliases only if user tries to push + _complete_goto_aliases "$cur" fi elif [ "$COMP_CWORD" -eq "3" ]; then # if we are on the third argument