summaryrefslogtreecommitdiff
path: root/packages/scripts/resources/lib/activate.inc.sh
diff options
context:
space:
mode:
Diffstat (limited to 'packages/scripts/resources/lib/activate.inc.sh')
-rw-r--r--packages/scripts/resources/lib/activate.inc.sh68
1 files changed, 68 insertions, 0 deletions
diff --git a/packages/scripts/resources/lib/activate.inc.sh b/packages/scripts/resources/lib/activate.inc.sh
new file mode 100644
index 0000000..79bed6b
--- /dev/null
+++ b/packages/scripts/resources/lib/activate.inc.sh
@@ -0,0 +1,68 @@
+
+# non-interactive activate
+ __activate_env() {
+ for func in $(typeset -F | cut -f 3 -d ' ' | grep -E '^__env_'); do
+ if [[ "$func" == "__env_$1" ]]; then
+ $func
+ echo "Activated $1"
+ return 0
+ fi
+ done
+ echo "Error: Environment not found $1" >&2
+ return 1
+}
+
+# print all defined envs
+list_envs() {
+ for env in $(typeset -F | sed -n -e 's/^declare -f __env_//p'); do
+ active=false
+ for env_active in $ENV_ACTIVE; do
+ if [ "$env_active" == "$env" ]; then
+ active=true
+ fi
+ done
+ if $active; then
+ echo -n "${env}* "
+ else
+ echo -n "$env "
+ fi
+ done
+ echo ""
+}
+
+plain_list_envs() {
+ typeset -F | sed -n -e 's/^declare -f __env_//p'
+}
+
+# Interactive activate
+activate() {
+ err=false
+ for env in $*; do
+ if ! typeset -F | grep -q -E "^declare -f __env_${env}$"; then
+ echo "Environment not defined: $env"
+ err=true
+ fi
+ done
+ if $err; then
+ return 1
+ fi
+
+ for env in $*; do
+ if typeset -F | grep -q -E "^declare -f __env_${env}$"; then
+ export ENV_ACTIVE="$ENV_ACTIVE${ENV_ACTIVE:+ }$env"
+ __env_${env}
+ fi
+ done
+ echo "Active: $ENV_ACTIVE"
+}
+
+# initialization
+for env_request in $ENV_ACTIVE; do
+ __activate_env $env_request
+done
+
+# bash-completion for `activate'
+_activate() {
+ _init_completion -s || return
+ COMPREPLY=( $(compgen -W "$(list_envs)" -- $cur) )
+} && complete -F _activate activate