summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorstep <step-@users.noreply.github.com>2023-10-07 10:26:46 +0200
committerGitHub <noreply@github.com>2023-10-07 17:26:46 +0900
commit0f15f1ab73826b615caf395473160efc355143cb (patch)
treee4a5d42f769ca4adf75de482afd3d2df1ab74dfa /shell
parent488a236b7a4d01e910e0ac80b4794a7a054fb3a8 (diff)
[bash] Improve mawk detection (#3463)
* Use the all-compatible mawk `-W version` option. https://github.com/junegunn/fzf/pull/3313#issuecomment-1747934690. * Run the command and not a function consistently with #3462. The version check bash code relies on the following mawk source code, extracted from mawk 1.3.4 20230322. ``` version.c: 18- #include "init.h" 19- #include "patchlev.h" 20- 21: #define VERSION_STRING \ 22- "mawk %d.%d%s %s\n\ 23- Copyright 2008-2022,2023, Thomas E. Dickey\n\ 24- Copyright 1991-1996,2014, Michael D. Brennan\n\n" .... 30- void 31- print_version(FILE *fp) 32- { 33: fprintf(fp, VERSION_STRING, PATCH_BASE, PATCH_LEVEL, PATCH_STRING, DATE_STRING); 34- fflush(fp); 35- 36- #define SHOW_RANDOM "random-funcs:" patchlev.h: 13- /* 14- * $MawkId: patchlev.h,v 1.128 2023/03/23 00:23:57 tom Exp $ 15- */ 16: #define PATCH_BASE 1 17- #define PATCH_LEVEL 3 18- #define PATCH_STRING ".4" 19- #define DATE_STRING "20230322" ``` Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/key-bindings.bash16
1 files changed, 7 insertions, 9 deletions
diff --git a/shell/key-bindings.bash b/shell/key-bindings.bash
index 8654a6f2..398f66e4 100644
--- a/shell/key-bindings.bash
+++ b/shell/key-bindings.bash
@@ -56,7 +56,7 @@ if command -v perl > /dev/null; then
output=$(
set +o pipefail
builtin fc -lnr -2147483648 |
- last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e "$script" |
+ last_hist=$(HISTTIMEFORMAT='' builtin history 1) command perl -n -l0 -e "$script" |
FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) --query "$READLINE_LINE"
) || return
READLINE_LINE=${output#*$'\t'}
@@ -66,16 +66,14 @@ if command -v perl > /dev/null; then
READLINE_POINT=0x7fffffff
fi
}
-else # awk
+else # awk - fallback for POSIX systems
__fzf_history__() {
- local output opts script
+ local output opts script n x y z d
if [[ -z $__fzf_awk ]]; then
__fzf_awk=awk
- # if installed, mawk is faster
- command -v mawk > /dev/null &&
- mawk --version | # at least 1.3.4
- awk 'NR == 1 { split($2, a, "."); v=(a[1]*1000000+ a[2]*1000+ a[3]*1); exit !(v >= 1003004) }' &&
- __fzf_awk=mawk
+ # choose the faster mawk if: it's installed && build date >= 20230322 && version >= 1.3.4
+ IFS=' .' read n x y z d <<< $(command mawk -W version 2> /dev/null)
+ [[ $n == mawk ]] && (( d >= 20230302 && (x *1000 +y) *1000 +z >= 1003004 )) && __fzf_awk=mawk
fi
opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort ${FZF_CTRL_R_OPTS-} +m --read0"
[[ $(HISTTIMEFORMAT='' builtin history 1) =~ [[:digit:]]+ ]] # how many history entries
@@ -87,7 +85,7 @@ else # awk
output=$(
set +o pipefail
builtin fc -lnr -2147483648 2> /dev/null | # ( $'\t '<lines>$'\n' )* ; <lines> ::= [^\n]* ( $'\n'<lines> )*
- $__fzf_awk "$script" | # ( <counter>$'\t'<lines>$'\000' )*
+ command $__fzf_awk "$script" | # ( <counter>$'\t'<lines>$'\000' )*
FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) --query "$READLINE_LINE"
) || return
READLINE_LINE=${output#*$'\t'}