plugins/dirs: use XDG_STATE_HOME

Locate the bookmarks file in $XDG_STATE_HOME, and migrate an existing file from the old location if it exists.
pull/2001/head
John D Pell 2021-12-31 00:11:23 -08:00
parent 2e51e92699
commit d8e7b173b5
1 changed files with 59 additions and 49 deletions

View File

@ -32,74 +32,84 @@ alias pu="pushd"
alias po="popd" alias po="popd"
function dirs-help() { function dirs-help() {
about 'directory navigation alias usage' about 'directory navigation alias usage'
group 'dirs' group 'dirs'
echo "Directory Navigation Alias Usage" echo "Directory Navigation Alias Usage"
echo echo
echo "Use the power of directory stacking to move" echo "Use the power of directory stacking to move"
echo "between several locations with ease." echo "between several locations with ease."
echo echo
echo "d : Show directory stack." echo "d : Show directory stack."
echo "po : Remove current location from stack." echo "po : Remove current location from stack."
echo "pc : Adds current location to stack." echo "pc : Adds current location to stack."
echo "pu <dir>: Adds given location to stack." echo "pu <dir>: Adds given location to stack."
echo "1 : Change to stack location 1." echo "1 : Change to stack location 1."
echo "2 : Change to stack location 2." echo "2 : Change to stack location 2."
echo "3 : Change to stack location 3." echo "3 : Change to stack location 3."
echo "4 : Change to stack location 4." echo "4 : Change to stack location 4."
echo "5 : Change to stack location 5." echo "5 : Change to stack location 5."
echo "6 : Change to stack location 6." echo "6 : Change to stack location 6."
echo "7 : Change to stack location 7." echo "7 : Change to stack location 7."
echo "8 : Change to stack location 8." echo "8 : Change to stack location 8."
echo "9 : Change to stack location 9." echo "9 : Change to stack location 9."
} }
# Add bookmarking functionality # Add bookmarking functionality
# Usage: # Usage:
if [ ! -f ~/.dirs ]; then # if doesn't exist, create it : "${BASH_IT_DIRS_BKS:=${XDG_STATE_HOME:-~/.local/state}/bash_it/dirs}"
touch ~/.dirs if [[ -f "${BASH_IT_DIRS_BKS?}" ]]; then
source "$BASH_IT_DIRS_BKS"
elif [[ -f ~/.dirs ]]; then
mv -vn ~/.dirs "$BASH_IT_DIRS_BKS"
source "$BASH_IT_DIRS_BKS"
else else
source ~/.dirs touch "$BASH_IT_DIRS_BKS"
fi fi
alias L='cat ~/.dirs' alias L='cat "${BASH_IT_DIRS_BKS?}"'
# Goes to destination dir, otherwise stay in the dir # Goes to destination dir, otherwise stay in the dir
G () { function G() {
about 'goes to destination dir' about 'goes to destination dir'
param '1: directory' param '1: directory'
example '$ G ..' example '$ G ..'
group 'dirs' group 'dirs'
cd "${1:-${PWD}}" ; cd "${1:-${PWD}}"
} }
S () { function S() {
about 'save a bookmark' about 'save a bookmark'
param '1: bookmark name' param '1: bookmark name'
example '$ S mybkmrk' example '$ S mybkmrk'
group 'dirs' 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; sed "/$@/d" "$BASH_IT_DIRS_BKS" > ~/.dirs1
\mv ~/.dirs1 ~/.dirs; \mv ~/.dirs1 "$BASH_IT_DIRS_BKS"
echo "$@"=\""${PWD}"\" >> ~/.dirs; echo "$@"=\""${PWD}"\" >> "$BASH_IT_DIRS_BKS"
source ~/.dirs ; source "$BASH_IT_DIRS_BKS"
} }
R () { function R() {
about 'remove a bookmark' about 'remove a bookmark'
param '1: bookmark name' param '1: bookmark name'
example '$ R mybkmrk' example '$ R mybkmrk'
group 'dirs' 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; sed "/$@/d" "$BASH_IT_DIRS_BKS" > ~/.dirs1
\mv ~/.dirs1 ~/.dirs; \mv ~/.dirs1 "$BASH_IT_DIRS_BKS"
} }
alias U='source ~/.dirs' # Update bookmark stack alias U='source "$BASH_IT_DIRS_BKS"' # Update bookmark stack