Create lib finalize hook

Create an array `_bash_it_library_finalize_hook` and loop at the end of the main `bash_it.sh` to run each element in the array.

The purpose here is to run some command after everything else has been loaded. For example, the appearance lib checks for executables for SCM commands, but `$PATH` may be altered after appearance has loaded and therefore some available commands may never be discovered. Therefore, create `_bash_it_appearance_scm_init()` and add it to the hook. It will re-check at end of `bash_it.sh` just before prompt is first displayed.
pull/2004/head
John D Pell 2021-09-11 20:29:49 -07:00
parent 86c1e3c043
commit bdaf29f84c
2 changed files with 11 additions and 3 deletions

View File

@ -15,8 +15,11 @@ fi
# shellcheck disable=SC1090 # shellcheck disable=SC1090
source "${BASH_IT}"/vendor/github.com/erichs/composure/composure.sh source "${BASH_IT}"/vendor/github.com/erichs/composure/composure.sh
# We need to load logging module first as well in order to be able to log # Declare our end-of-main finishing hook
# shellcheck source=./lib/log.bash declare -a _bash_it_library_finalize_hook
# We need to load logging module early in order to be able to log
# shellcheck source-path=SCRIPTDIR/lib
source "${BASH_IT}/lib/log.bash" source "${BASH_IT}/lib/log.bash"
# We can only log it now # We can only log it now
@ -148,3 +151,8 @@ if ! _command_exists reload && [[ -n "${BASH_IT_RELOAD_LEGACY:-}" ]]; then
;; ;;
esac esac
fi fi
for _bash_it_library_finalize_f in "${_bash_it_library_finalize_hook[@]:-}"; do
eval "${_bash_it_library_finalize_f?}" # Use `eval` to achieve the same behavior as `$PROMPT_COMMAND`.
done
unset "${!_bash_it_library_finalize_@}"

View File

@ -106,7 +106,7 @@ function _bash_it_appearance_scm_init() {
fi fi
fi fi
} }
_bash_it_appearance_scm_init _bash_it_library_finalize_hook+=('_bash_it_appearance_scm_init')
function scm { function scm {
if [[ "$SCM_CHECK" = false ]]; then if [[ "$SCM_CHECK" = false ]]; then