mirror of
https://github.com/atuinsh/atuin.git
synced 2025-01-24 15:20:32 +01:00
fix(bash): work around bash < 4 and introduce initialization guards (#1533)
* fix(bash): add a guard for interactive shells * fix(bash): add a guard for the Bash version * fix(bash): localize READLINE_LINE in bash < 4 In bash < 4, the variables READLINE_LINE and READLINE_POINT are not supported for the shell commands called by `bind -x`. Even if it is not supported, atuin works in not a bad way. However, this sometimes causes a strange behavior by the remaining values of READLINE_LINE set in the previous calls of __atuin_history. In bash < 4, we can consistently use an empty string instead of $READLINE_LINE, and the changes to READLINE_LINE and READLINE_POINT should be localized within the function. * fix(bash): add guard for double initialization In bash, it is customary to reload the settings by sourcing `.bashrc` again after modifying it. In such a case, `eval "$(atuin init bash)"` is executed again. This registers duplicate hooks to `preexec_functions` and `precmd_functions`. To prevent this in this patch, we introduce an include guard, so that the initialization is not performed more than once.
This commit is contained in:
parent
6dda16d047
commit
a7bed61461
@ -265,6 +265,8 @@ antigen bundle atuinsh/atuin@main
|
||||
|
||||
### bash
|
||||
|
||||
Atuin works in `bash >= 3.1`, but we recommend to use Atuin with the recent versions of `bash >= 5`.
|
||||
|
||||
#### [ble.sh](https://github.com/akinomyoga/ble.sh)
|
||||
|
||||
Atuin works best in bash when using [ble.sh](https://github.com/akinomyoga/ble.sh) >= 0.4.
|
||||
@ -298,6 +300,8 @@ echo 'eval "$(atuin init bash)"' >> ~/.bashrc
|
||||
|
||||
bash-preexec currently has an issue where it will stop honoring `ignorespace`. While Atuin will ignore commands prefixed with whitespace, they may still end up in your bash history. Please check your configuration! All other shells do not have this issue.
|
||||
|
||||
To use Atuin in `bash < 4` with bash-preexec, the option `enter_accept` needs to be turned on (which is so by default).
|
||||
|
||||
### fish
|
||||
|
||||
Add
|
||||
|
@ -1,3 +1,16 @@
|
||||
# Include guard
|
||||
[[ ${__atuin_initialized-} == true ]] && return 0
|
||||
__atuin_initialized=true
|
||||
|
||||
# Enable only in interactive shells
|
||||
[[ $- == *i* ]] || return 0
|
||||
|
||||
# Require bash >= 3.1
|
||||
if ((BASH_VERSINFO[0] < 3 || BASH_VERSINFO[0] == 3 && BASH_VERSINFO[1] < 1)); then
|
||||
[[ -t 2 ]] && printf 'atuin: requires bash >= 3.1 for the integration.\n' >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
ATUIN_SESSION=$(atuin uuid)
|
||||
ATUIN_STTY=$(stty -g)
|
||||
export ATUIN_SESSION
|
||||
@ -154,6 +167,12 @@ __atuin_history() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# READLINE_LINE and READLINE_POINT are only supported by bash >= 4.0 or
|
||||
# ble.sh. When it is not supported, we localize them to suppress strange
|
||||
# behaviors.
|
||||
[[ ${BLE_ATTACHED-} ]] || ((BASH_VERSINFO[0] >= 4)) ||
|
||||
local READLINE_LINE="" READLINE_POINT=0
|
||||
|
||||
local __atuin_output
|
||||
__atuin_output=$(ATUIN_SHELL_BASH=t ATUIN_LOG=error atuin search "$@" -i -- "$READLINE_LINE" 3>&1 1>&2 2>&3)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user