plugins/percol: use `_command_exists`

Addresses bash-it/bash-it#1632

And use `_log_warning`.

Alsö, code style cleanup: quote things, handle unbound parameters, &c.

Alsö alsö, short-circuit if not installed or inadequate _Bash_ version.
pull/1956/head
John D Pell 2021-09-24 00:38:54 -07:00
parent d6c4c0cc88
commit 2ada414266
1 changed files with 18 additions and 15 deletions

View File

@ -1,3 +1,4 @@
# shellcheck shell=bash
cite about-plugin cite about-plugin
about-plugin 'Search&Select history with percol' about-plugin 'Search&Select history with percol'
@ -12,24 +13,26 @@ about-plugin 'Search&Select history with percol'
# Usage # Usage
## C-r to search&select from history ## C-r to search&select from history
_replace_by_history() { _command_exists percol || return
if command -v tac>/dev/null; then
if [[ ${BASH_VERSINFO[0]} -lt 4 ]]; then
_log_warning "You have to upgrade Bash to Bash v4.x to use the 'percol' plugin."
_log_warning "Your current Bash version is $BASH_VERSION."
return
else
bind -x '"\C-r": _replace_by_history'
fi
function _replace_by_history() {
local HISTTIMEFORMAT= # Ensure we can parse history properly
if _command_exists tac
then
alias _tac=tac alias _tac=tac
else else
alias _tac="tail -r" alias _tac="tail -r"
fi fi
local l=$(HISTTIMEFORMAT= history | _tac | sed -e 's/^\ *[0-9]*\ *//' | percol --query "$READLINE_LINE") #TODO: "${histlines[@]/*( )+([[:digit:]])*( )/}"
READLINE_LINE="$l" local l="$(history | _tac | sed -e 's/^\ *[0-9]*\ *//' | percol --query "${READLINE_LINE:-}")"
READLINE_LINE="${l}"
READLINE_POINT=${#l} READLINE_POINT=${#l}
} }
if command -v percol>/dev/null; then
current_version=${BASH_VERSION%%[^0-9]*}
if [ $current_version -lt 4 ]; then
echo -e "\033[91mWarning: You have to upgrade Bash to Bash v4.x to use the 'percol' plugin.\033[m"
echo -e "\033[91m Your current Bash version is $BASH_VERSION.\033[m"
else
bind -x '"\C-r": _replace_by_history'
fi
fi