preexec: set options before load

By setting `__bp_delay_install`, we avoid any immediate initialization at all. We then override two troublesome functions before calling `__bp_install_after_session_init()`.

The `__bp_install_after_session_init()` function doesn't enable the DEBUG trap, just sets `$PROMPT_COMMAND` to include `__bp_install()`, so the actual final `$PROMPT_COMMAND` is not finished, and DEBUG trap set, until after the first prompt is displayed.
pull/1979/head
John D Pell 2021-10-20 15:28:59 -04:00
parent 2d1bd82575
commit 9ce199c251
2 changed files with 24 additions and 5 deletions

View File

@ -155,6 +155,3 @@ if ! _command_exists reload && [[ -n "${BASH_IT_RELOAD_LEGACY:-}" ]]; then
;; ;;
esac esac
fi fi
# Disable trap DEBUG on subshells - https://github.com/Bash-it/bash-it/pull/1040
set +T

View File

@ -1,3 +1,25 @@
# shellcheck shell=bash # shellcheck shell=bash
# shellcheck disable=1090 # shellcheck disable=SC2034
source "${BASH_IT}"/vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh #
# Load the `bash-preexec.sh` library, and define helper functions
## Prepare, load, fix, and install `bash-preexec.sh`
# Disable immediate `$PROMPT_COMMAND` modification
__bp_delay_install="delayed"
# shellcheck source-path=SCRIPTDIR/../github.com/rcaloras/bash-preexec
source "${BASH_IT?}/vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh"
# Block damanaging user's `$HISTCONTROL`
function __bp_adjust_histcontrol() { :; }
# Don't fail on readonly variables
function __bp_require_not_readonly() { :; }
# Disable trap DEBUG on subshells - https://github.com/Bash-it/bash-it/pull/1040
__bp_enable_subshells= # blank
set +T
# Modify `$PROMPT_COMMAND` now
__bp_install_after_session_init