Skip to content

Commit a78d72e

Browse files
committed
plugin/projects: refactor a bit
1 parent 1ec48c8 commit a78d72e

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

plugins/available/projects.plugin.bash

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,48 @@ function pj() {
88
group 'projects'
99

1010
local proj="${1?${FUNCNAME[0]}: project name required}"
11-
local cmd PS3 dest
12-
local -a dests=()
11+
local cmd PS3 dest d
12+
local -a dests
1313

1414
if [[ "$proj" == "open" ]]; then
1515
shift
16+
proj="${1}"
1617
cmd="${EDITOR?}"
1718
fi
1819

1920
# collect possible destinations to account for directories
2021
# with the same name in project directories
21-
IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS}"
22-
23-
# when multiple destinations are found, present a menu
24-
if [[ ${#dests[@]} -eq 0 ]]; then
25-
_log_error "no such project '${1:-}'"
26-
return 1
27-
elif [[ ${#dests[@]} -eq 1 ]]; then
28-
dest="${dests[0]}"
29-
elif [[ ${#dests[@]} -gt 1 ]]; then
30-
PS3="Multiple project directories found. Please select one: "
31-
dests+=("cancel")
32-
select d in "${dests[@]}"; do
33-
case $d in
34-
"cancel")
35-
return
36-
;;
37-
*)
38-
dest=$d
39-
break
40-
;;
41-
esac
42-
done
43-
else
44-
_log_error "please report this error"
45-
return 2 # should never reach this
46-
fi
22+
IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS?${FUNCNAME[0]}: project working folders must be configured}"
23+
for d in "${!dests[@]}"; do
24+
if [[ ! -d "${dests[d]}" ]]; then
25+
unset 'dests[d]'
26+
fi
27+
done
28+
29+
case ${#dests[@]} in
30+
0)
31+
_log_error "BASH_IT_PROJECT_PATHS must contain at least one existing location"
32+
return 1
33+
;;
34+
1)
35+
dest="${dests[*]}/${proj}"
36+
;;
37+
*)
38+
PS3="Multiple project directories found. Please select one: "
39+
dests+=("cancel")
40+
select d in "${dests[@]}"; do
41+
case $d in
42+
"cancel")
43+
return
44+
;;
45+
*)
46+
dest="${d}/${proj}"
47+
break
48+
;;
49+
esac
50+
done
51+
;;
52+
esac
4753

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

0 commit comments

Comments
 (0)