bash-it/plugins/available/projects.plugin.bash

52 lines
1.1 KiB
Bash

# shellcheck shell=bash
about-plugin 'quickly navigate configured project paths'
: "${BASH_IT_PROJECT_PATHS:=$HOME/Projects:$HOME/src:$HOME/work}"
function pj() {
about 'navigate quickly to your various project directories'
group 'projects'
local proj="${1?${FUNCNAME[0]}: project name required}"
local cmd PS3 dest
local -a dests=()
if [[ "$proj" == "open" ]]; then
shift
cmd="${EDITOR?}"
fi
# collect possible destinations to account for directories
# with the same name in project directories
IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS}"
# when multiple destinations are found, present a menu
if [[ ${#dests[@]} -eq 0 ]]; then
_log_error "no such project '${1:-}'"
return 1
elif [[ ${#dests[@]} -eq 1 ]]; then
dest="${dests[0]}"
elif [[ ${#dests[@]} -gt 1 ]]; then
PS3="Multiple project directories found. Please select one: "
dests+=("cancel")
select d in "${dests[@]}"; do
case $d in
"cancel")
return
;;
*)
dest=$d
break
;;
esac
done
else
_log_error "please report this error"
return 2 # should never reach this
fi
"${cmd:-cd}" "${dest}"
}
alias pjo="pj open"