plugin/projects: cleanup

I'm deliberately leaving the possibility that one might `pjo` without a project name...
pull/2010/head
John D Pell 2022-01-18 11:08:51 -08:00
parent 973a1f9b40
commit ea2002a2e4
2 changed files with 42 additions and 65 deletions

View File

@ -115,6 +115,7 @@ plugins/available/osx-timemachine.plugin.bash
plugins/available/osx.plugin.bash
plugins/available/percol.plugin.bash
plugins/available/plenv.plugin.bash
plugins/available/projects.plugin.bash
plugins/available/proxy.plugin.bash
plugins/available/pyenv.plugin.bash
plugins/available/python.plugin.bash

View File

@ -1,53 +1,32 @@
cite about-plugin
about-plugin 'quickly navigate configured paths with `pj` and `pjo`. example: "export PROJECT_PATHS=~/projects:~/work/projects"'
# shellcheck shell=bash
about-plugin 'quickly navigate configured project paths'
function pj {
about 'navigate quickly to your various project directories'
group 'projects'
: "${BASH_IT_PROJECT_PATHS:=$HOME/Projects:$HOME/src:$HOME/work}"
function pj() {
about 'navigate quickly to your various project directories'
group 'projects'
if [ -z "$PROJECT_PATHS" ]; then
echo "error: PROJECT_PATHS not set"
return 1
fi
local proj="${1?${FUNCNAME[0]}: project name required}"
local cmd PS3 dest
local -a dests=()
local cmd
local dest
local -a dests
if [ "$1" == "open" ]; then
if [[ "$proj" == "open" ]]; then
shift
cmd="$EDITOR"
fi
cmd="${cmd:-cd}"
if [ -z "$1" ]; then
echo "error: no project provided"
return 1
fi
# collect possible destinations to account for directories
# with the same name in project directories
for i in ${PROJECT_PATHS//:/$'\n'}; do
if [ -d "$i"/"$1" ]; then
dests+=("$i/$1")
cmd="${EDITOR?}"
fi
done
# 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
echo "error: no such project '$1'"
# 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
elif [[ ${#dests[@]} -eq 1 ]]; then
dest="${dests[0]}"
elif [ ${#dests[@]} -gt 1 ]; then
elif [[ ${#dests[@]} -gt 1 ]]; then
PS3="Multiple project directories found. Please select one: "
dests+=("cancel")
select d in "${dests[@]}"; do
@ -61,15 +40,12 @@ elif [ ${#dests[@]} -gt 1 ]; then
;;
esac
done
else
_log_error "please report this error"
return 2 # should never reach this
fi
else
echo "error: please report this error"
return 1 # should never reach this
fi
$cmd "$dest"
"${cmd:-cd}" "${dest}"
}
alias pjo="pj open"