Skip to content

Commit

Permalink
Merge pull request #2010 from gaelicWizard/plugin-projects
Browse files Browse the repository at this point in the history
Plugin/projects: cleanup
  • Loading branch information
NoahGorny authored Jan 25, 2022
2 parents 44a1b55 + a78d72e commit 2575d64
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 72 deletions.
1 change: 1 addition & 0 deletions clean_files.txt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,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
Expand Down
126 changes: 54 additions & 72 deletions plugins/available/projects.plugin.bash
Original file line number Diff line number Diff line change
@@ -1,75 +1,57 @@
cite about-plugin
about-plugin 'quickly navigate configured paths with `pj` and `pjo`. example: "export PROJECT_PATHS=~/projects:~/work/projects"'

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 cmd
local dest
local -a dests


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"
# 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 d
local -a dests

if [[ "$proj" == "open" ]]; then
shift
proj="${1}"
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?${FUNCNAME[0]}: project working folders must be configured}"
for d in "${!dests[@]}"; do
if [[ ! -d "${dests[d]}" ]]; then
unset 'dests[d]'
fi
done

case ${#dests[@]} in
0)
_log_error "BASH_IT_PROJECT_PATHS must contain at least one existing location"
return 1
;;
1)
dest="${dests[*]}/${proj}"
;;
*)
PS3="Multiple project directories found. Please select one: "
dests+=("cancel")
select d in "${dests[@]}"; do
case $d in
"cancel")
return
;;
*)
dest="${d}/${proj}"
break
;;
esac
done
;;
esac

"${cmd:-cd}" "${dest}"
}

alias pjo="pj open"
3 changes: 3 additions & 0 deletions template/bash_profile.template.bash
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ export IRC_CLIENT='irssi'
# Set this to the command you use for todo.txt-cli
export TODO="t"

# Set this to the location of your work or project folders
#BASH_IT_PROJECT_PATHS="${HOME}/Projects:/Volumes/work/src"

# Set this to false to turn off version control status checking within the prompt for all themes
export SCM_CHECK=true
# Set to actual location of gitstatus directory if installed
Expand Down

0 comments on commit 2575d64

Please sign in to comment.