plugin/projects: cleanup
I'm deliberately leaving the possibility that one might `pjo` without a project name...pull/2010/head
parent
973a1f9b40
commit
ea2002a2e4
|
|
@ -115,6 +115,7 @@ plugins/available/osx-timemachine.plugin.bash
|
||||||
plugins/available/osx.plugin.bash
|
plugins/available/osx.plugin.bash
|
||||||
plugins/available/percol.plugin.bash
|
plugins/available/percol.plugin.bash
|
||||||
plugins/available/plenv.plugin.bash
|
plugins/available/plenv.plugin.bash
|
||||||
|
plugins/available/projects.plugin.bash
|
||||||
plugins/available/proxy.plugin.bash
|
plugins/available/proxy.plugin.bash
|
||||||
plugins/available/pyenv.plugin.bash
|
plugins/available/pyenv.plugin.bash
|
||||||
plugins/available/python.plugin.bash
|
plugins/available/python.plugin.bash
|
||||||
|
|
|
||||||
|
|
@ -1,53 +1,32 @@
|
||||||
cite about-plugin
|
# shellcheck shell=bash
|
||||||
about-plugin 'quickly navigate configured paths with `pj` and `pjo`. example: "export PROJECT_PATHS=~/projects:~/work/projects"'
|
about-plugin 'quickly navigate configured project paths'
|
||||||
|
|
||||||
function pj {
|
: "${BASH_IT_PROJECT_PATHS:=$HOME/Projects:$HOME/src:$HOME/work}"
|
||||||
about 'navigate quickly to your various project directories'
|
|
||||||
group 'projects'
|
|
||||||
|
|
||||||
|
function pj() {
|
||||||
|
about 'navigate quickly to your various project directories'
|
||||||
|
group 'projects'
|
||||||
|
|
||||||
if [ -z "$PROJECT_PATHS" ]; then
|
local proj="${1?${FUNCNAME[0]}: project name required}"
|
||||||
echo "error: PROJECT_PATHS not set"
|
local cmd PS3 dest
|
||||||
return 1
|
local -a dests=()
|
||||||
fi
|
|
||||||
|
|
||||||
|
if [[ "$proj" == "open" ]]; then
|
||||||
local cmd
|
|
||||||
local dest
|
|
||||||
local -a dests
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$1" == "open" ]; then
|
|
||||||
shift
|
shift
|
||||||
cmd="$EDITOR"
|
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")
|
|
||||||
fi
|
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
|
# when multiple destinations are found, present a menu
|
||||||
if [ ${#dests[@]} -eq 0 ]; then
|
if [[ ${#dests[@]} -eq 0 ]]; then
|
||||||
echo "error: no such project '$1'"
|
_log_error "no such project '${1:-}'"
|
||||||
return 1
|
return 1
|
||||||
|
elif [[ ${#dests[@]} -eq 1 ]]; then
|
||||||
elif [ ${#dests[@]} -eq 1 ]; then
|
|
||||||
dest="${dests[0]}"
|
dest="${dests[0]}"
|
||||||
|
elif [[ ${#dests[@]} -gt 1 ]]; then
|
||||||
elif [ ${#dests[@]} -gt 1 ]; then
|
|
||||||
PS3="Multiple project directories found. Please select one: "
|
PS3="Multiple project directories found. Please select one: "
|
||||||
dests+=("cancel")
|
dests+=("cancel")
|
||||||
select d in "${dests[@]}"; do
|
select d in "${dests[@]}"; do
|
||||||
|
|
@ -61,15 +40,12 @@ elif [ ${#dests[@]} -gt 1 ]; then
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
_log_error "please report this error"
|
||||||
|
return 2 # should never reach this
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
"${cmd:-cd}" "${dest}"
|
||||||
echo "error: please report this error"
|
|
||||||
return 1 # should never reach this
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
$cmd "$dest"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alias pjo="pj open"
|
alias pjo="pj open"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue