From ea2002a2e4c84943385c66637ef09544060a33a6 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Tue, 18 Jan 2022 11:08:51 -0800 Subject: [PATCH] plugin/projects: cleanup I'm deliberately leaving the possibility that one might `pjo` without a project name... --- clean_files.txt | 1 + plugins/available/projects.plugin.bash | 106 ++++++++++--------------- 2 files changed, 42 insertions(+), 65 deletions(-) diff --git a/clean_files.txt b/clean_files.txt index 9c4f5301..3b489e35 100644 --- a/clean_files.txt +++ b/clean_files.txt @@ -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 diff --git a/plugins/available/projects.plugin.bash b/plugins/available/projects.plugin.bash index 775ec813..e243ce97 100644 --- a/plugins/available/projects.plugin.bash +++ b/plugins/available/projects.plugin.bash @@ -1,75 +1,51 @@ -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=() + if [[ "$proj" == "open" ]]; then + shift + cmd="${EDITOR?}" + fi -local cmd -local dest -local -a dests + # 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 -if [ "$1" == "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") - fi -done - - -# when multiple destinations are found, present a menu -if [ ${#dests[@]} -eq 0 ]; then - echo "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 - echo "error: please report this error" - return 1 # should never reach this - -fi - - -$cmd "$dest" + "${cmd:-cd}" "${dest}" } alias pjo="pj open"