diff --git a/bash_it.sh b/bash_it.sh index bda3407e..59c6ed8e 100755 --- a/bash_it.sh +++ b/bash_it.sh @@ -15,8 +15,11 @@ fi # shellcheck disable=SC1090 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 -# shellcheck source=./lib/log.bash +# Declare our end-of-main finishing hook +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" # We can only log it now @@ -148,3 +151,8 @@ if ! _command_exists reload && [[ -n "${BASH_IT_RELOAD_LEGACY:-}" ]]; then ;; esac 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_@}" diff --git a/docs/development.rst b/docs/development.rst index cd5c59b0..4742e971 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -147,6 +147,11 @@ Plugin Disable Callbacks Plugins can define a function that will be called when the plugin is being disabled. The callback name should be ``{PLUGIN_NAME}_on_disable``\ , you can see ``gitstatus`` for usage example. +Library Finalization Callback +----------------------------- + +Specifically for Bash-it library code, e.g. in the `lib` subdirectory, a hook is available to run some code at the very end of the main loader script after all other code has been loaded. For example, `lib/theme` uses `_bash_it_library_finalize_hook+=('_bash_it_appearance_scm_init')` to add a function to be called after all plugins have been loaded. + Using the pre-commit hook ------------------------- diff --git a/themes/base.theme.bash b/themes/base.theme.bash index f9f5190d..94e6befd 100644 --- a/themes/base.theme.bash +++ b/themes/base.theme.bash @@ -106,7 +106,7 @@ function _bash_it_appearance_scm_init() { fi fi } -_bash_it_appearance_scm_init +_bash_it_library_finalize_hook+=('_bash_it_appearance_scm_init') function scm { if [[ "$SCM_CHECK" = false ]]; then