plugin/projects: refactor a bit

pull/2010/head
John D Pell 2022-01-18 17:08:16 -08:00
parent 1ec48c8d71
commit a78d72eed1
1 changed files with 33 additions and 27 deletions

View File

@ -8,42 +8,48 @@ function pj() {
group 'projects' group 'projects'
local proj="${1?${FUNCNAME[0]}: project name required}" local proj="${1?${FUNCNAME[0]}: project name required}"
local cmd PS3 dest local cmd PS3 dest d
local -a dests=() local -a dests
if [[ "$proj" == "open" ]]; then if [[ "$proj" == "open" ]]; then
shift shift
proj="${1}"
cmd="${EDITOR?}" cmd="${EDITOR?}"
fi fi
# collect possible destinations to account for directories # collect possible destinations to account for directories
# with the same name in project directories # with the same name in project directories
IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS}" IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS?${FUNCNAME[0]}: project working folders must be configured}"
for d in "${!dests[@]}"; do
if [[ ! -d "${dests[d]}" ]]; then
unset 'dests[d]'
fi
done
# when multiple destinations are found, present a menu case ${#dests[@]} in
if [[ ${#dests[@]} -eq 0 ]]; then 0)
_log_error "no such project '${1:-}'" _log_error "BASH_IT_PROJECT_PATHS must contain at least one existing location"
return 1 return 1
elif [[ ${#dests[@]} -eq 1 ]]; then ;;
dest="${dests[0]}" 1)
elif [[ ${#dests[@]} -gt 1 ]]; then dest="${dests[*]}/${proj}"
PS3="Multiple project directories found. Please select one: " ;;
dests+=("cancel") *)
select d in "${dests[@]}"; do PS3="Multiple project directories found. Please select one: "
case $d in dests+=("cancel")
"cancel") select d in "${dests[@]}"; do
return case $d in
;; "cancel")
*) return
dest=$d ;;
break *)
;; dest="${d}/${proj}"
esac break
done ;;
else esac
_log_error "please report this error" done
return 2 # should never reach this ;;
fi esac
"${cmd:-cd}" "${dest}" "${cmd:-cd}" "${dest}"
} }