52 lines
1.1 KiB
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"
|