added menu and error messages to projects plugin. indentation cleanup to conform to editorconfig.
parent
1293dbf086
commit
85e7e408aa
|
|
@ -35,4 +35,5 @@ _pj() {
|
||||||
}
|
}
|
||||||
|
|
||||||
complete -F _pj -o nospace pj
|
complete -F _pj -o nospace pj
|
||||||
|
complete -F _pj -o nospace pjo
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,30 +2,74 @@ cite about-plugin
|
||||||
about-plugin 'add "export PROJECT_PATHS=~/projects:~/intertrode/projects" to navigate quickly to your project directories with `pj` and `pjo`'
|
about-plugin 'add "export PROJECT_PATHS=~/projects:~/intertrode/projects" to navigate quickly to your project directories with `pj` and `pjo`'
|
||||||
|
|
||||||
function pj {
|
function pj {
|
||||||
about 'navigate quickly to your various project directories'
|
about 'navigate quickly to your various project directories'
|
||||||
group 'projects'
|
group 'projects'
|
||||||
|
|
||||||
if [ -n "$PROJECT_PATHS" ]; then
|
|
||||||
local cmd
|
|
||||||
|
|
||||||
if [ "$1" == "open" ]; then
|
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
|
shift
|
||||||
cmd="$EDITOR"
|
cmd="$EDITOR"
|
||||||
fi
|
fi
|
||||||
|
cmd="${cmd:-cd}"
|
||||||
|
|
||||||
cmd="${cmd:-cd}"
|
|
||||||
|
|
||||||
if [ -n "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
for i in ${PROJECT_PATHS//:/$'\n'}; do
|
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
|
if [ -d "$i"/"$1" ]; then
|
||||||
$cmd "$i"/"$1"
|
dests+=("$i/$1")
|
||||||
return
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
echo "No such project '$1'"
|
|
||||||
|
# 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"
|
||||||
}
|
}
|
||||||
|
|
||||||
alias pjo="pj open"
|
alias pjo="pj open"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue