commit
2575d64deb
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,53 +1,40 @@
|
|||
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 d
|
||||
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")
|
||||
proj="${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?${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
|
||||
if [ ${#dests[@]} -eq 0 ]; then
|
||||
echo "error: no such project '$1'"
|
||||
case ${#dests[@]} in
|
||||
0)
|
||||
_log_error "BASH_IT_PROJECT_PATHS must contain at least one existing location"
|
||||
return 1
|
||||
|
||||
elif [ ${#dests[@]} -eq 1 ]; then
|
||||
dest="${dests[0]}"
|
||||
|
||||
elif [ ${#dests[@]} -gt 1 ]; then
|
||||
;;
|
||||
1)
|
||||
dest="${dests[*]}/${proj}"
|
||||
;;
|
||||
*)
|
||||
PS3="Multiple project directories found. Please select one: "
|
||||
dests+=("cancel")
|
||||
select d in "${dests[@]}"; do
|
||||
|
|
@ -56,20 +43,15 @@ elif [ ${#dests[@]} -gt 1 ]; then
|
|||
return
|
||||
;;
|
||||
*)
|
||||
dest=$d
|
||||
dest="${d}/${proj}"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
else
|
||||
echo "error: please report this error"
|
||||
return 1 # should never reach this
|
||||
|
||||
fi
|
||||
|
||||
|
||||
$cmd "$dest"
|
||||
"${cmd:-cd}" "${dest}"
|
||||
}
|
||||
|
||||
alias pjo="pj open"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue