diff --git a/clean_files.txt b/clean_files.txt
index ad3d4975..d810bb73 100644
--- a/clean_files.txt
+++ b/clean_files.txt
@@ -88,6 +88,7 @@ plugins/available/basher.plugin.bash
plugins/available/blesh.plugin.bash
plugins/available/cmd-returned-notify.plugin.bash
plugins/available/direnv.plugin.bash
+plugins/available/dirs.plugin.bash
plugins/available/docker-machine.plugin.bash
plugins/available/git-subrepo.plugin.bash
plugins/available/git.plugin.bash
diff --git a/plugins/available/dirs.plugin.bash b/plugins/available/dirs.plugin.bash
index a455ff95..f61680ca 100644
--- a/plugins/available/dirs.plugin.bash
+++ b/plugins/available/dirs.plugin.bash
@@ -1,3 +1,4 @@
+# shellcheck shell=bash
# Directory stack navigation:
#
# Add to stack with: pu /path/to/directory
@@ -32,74 +33,87 @@ alias pu="pushd"
alias po="popd"
function dirs-help() {
- about 'directory navigation alias usage'
- group 'dirs'
+ about 'directory navigation alias usage'
+ group 'dirs'
- echo "Directory Navigation Alias Usage"
- echo
- echo "Use the power of directory stacking to move"
- echo "between several locations with ease."
- echo
- echo "d : Show directory stack."
- echo "po : Remove current location from stack."
- echo "pc : Adds current location to stack."
- echo "pu
: Adds given location to stack."
- echo "1 : Change to stack location 1."
- echo "2 : Change to stack location 2."
- echo "3 : Change to stack location 3."
- echo "4 : Change to stack location 4."
- echo "5 : Change to stack location 5."
- echo "6 : Change to stack location 6."
- echo "7 : Change to stack location 7."
- echo "8 : Change to stack location 8."
- echo "9 : Change to stack location 9."
+ echo "Directory Navigation Alias Usage"
+ echo
+ echo "Use the power of directory stacking to move"
+ echo "between several locations with ease."
+ echo
+ echo "d : Show directory stack."
+ echo "po : Remove current location from stack."
+ echo "pc : Adds current location to stack."
+ echo "pu : Adds given location to stack."
+ echo "1 : Change to stack location 1."
+ echo "2 : Change to stack location 2."
+ echo "3 : Change to stack location 3."
+ echo "4 : Change to stack location 4."
+ echo "5 : Change to stack location 5."
+ echo "6 : Change to stack location 6."
+ echo "7 : Change to stack location 7."
+ echo "8 : Change to stack location 8."
+ echo "9 : Change to stack location 9."
}
# Add bookmarking functionality
# Usage:
-if [ ! -f ~/.dirs ]; then # if doesn't exist, create it
- touch ~/.dirs
+: "${BASH_IT_DIRS_BKS:=${XDG_STATE_HOME:-~/.local/state}/bash_it/dirs}"
+if [[ -f "${BASH_IT_DIRS_BKS?}" ]]; then
+ # shellcheck disable=SC1090
+ source "${BASH_IT_DIRS_BKS?}"
+elif [[ -f ~/.dirs ]]; then
+ mv -vn ~/.dirs "${BASH_IT_DIRS_BKS?}"
+ # shellcheck disable=SC1090
+ source "${BASH_IT_DIRS_BKS?}"
else
- source ~/.dirs
+ touch "${BASH_IT_DIRS_BKS?}"
fi
-alias L='cat ~/.dirs'
+alias L='cat "${BASH_IT_DIRS_BKS?}"'
# Goes to destination dir, otherwise stay in the dir
-G () {
- about 'goes to destination dir'
- param '1: directory'
- example '$ G ..'
- group 'dirs'
+function G() {
+ about 'goes to destination dir'
+ param '1: directory'
+ example '$ G ..'
+ group 'dirs'
- cd "${1:-${PWD}}" ;
+ cd "${1:-${PWD}}" || return
}
-S () {
- about 'save a bookmark'
- param '1: bookmark name'
- example '$ S mybkmrk'
- group 'dirs'
+function S() {
+ about 'save a bookmark'
+ param '1: bookmark name'
+ example '$ S mybkmrk'
+ group 'dirs'
- [[ $# -eq 1 ]] || { echo "${FUNCNAME[0]} function requires 1 argument"; return 1; }
+ [[ $# -eq 1 ]] || {
+ echo "${FUNCNAME[0]} function requires 1 argument"
+ return 1
+ }
- sed "/$@/d" ~/.dirs > ~/.dirs1;
- \mv ~/.dirs1 ~/.dirs;
- echo "$@"=\""${PWD}"\" >> ~/.dirs;
- source ~/.dirs ;
+ sed "/$1/d" "${BASH_IT_DIRS_BKS?}" > "${BASH_IT_DIRS_BKS?}.new"
+ command mv "${BASH_IT_DIRS_BKS?}.new" "${BASH_IT_DIRS_BKS?}"
+ echo "$1"=\""${PWD}"\" >> "${BASH_IT_DIRS_BKS?}"
+ # shellcheck disable=SC1090
+ source "${BASH_IT_DIRS_BKS?}"
}
-R () {
- about 'remove a bookmark'
- param '1: bookmark name'
- example '$ R mybkmrk'
- group 'dirs'
+function R() {
+ about 'remove a bookmark'
+ param '1: bookmark name'
+ example '$ R mybkmrk'
+ group 'dirs'
- [[ $# -eq 1 ]] || { echo "${FUNCNAME[0]} function requires 1 argument"; return 1; }
+ [[ $# -eq 1 ]] || {
+ echo "${FUNCNAME[0]} function requires 1 argument"
+ return 1
+ }
- sed "/$@/d" ~/.dirs > ~/.dirs1;
- \mv ~/.dirs1 ~/.dirs;
+ sed "/$1/d" "${BASH_IT_DIRS_BKS?}" > "${BASH_IT_DIRS_BKS?}.new"
+ command mv "${BASH_IT_DIRS_BKS?}.new" "${BASH_IT_DIRS_BKS?}"
}
-alias U='source ~/.dirs' # Update bookmark stack
+alias U='source "${BASH_IT_DIRS_BKS?}"' # Update bookmark stack