diff --git a/shell/key-bindings.bash b/shell/key-bindings.bash index 71cd9991..16e1ec5b 100644 --- a/shell/key-bindings.bash +++ b/shell/key-bindings.bash @@ -55,7 +55,7 @@ __fzf_history__() { local output output=$( builtin fc -lnr -2147483648 | - last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -p -l0 -e 'BEGIN { getc; $/ = "\n\t"; $HISTCMD = $ENV{last_hist} + 1 } s/^[ *]//; $_ = $HISTCMD - $. . "\t$_"' | + last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e 'BEGIN { getc; $/ = "\n\t"; $HISTCMD = $ENV{last_hist} + 1 } s/^[ *]//; print $HISTCMD - $. . "\t$_" if !$seen{$_}++' | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort $FZF_CTRL_R_OPTS +m --read0" $(__fzfcmd) --query "$READLINE_LINE" ) || return READLINE_LINE=${output#*$'\t'} diff --git a/shell/key-bindings.zsh b/shell/key-bindings.zsh index e291677d..79b83880 100644 --- a/shell/key-bindings.zsh +++ b/shell/key-bindings.zsh @@ -68,7 +68,7 @@ bindkey '\ec' fzf-cd-widget fzf-history-widget() { local selected num setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null - selected=( $(fc -rl 1 | + selected=( $(fc -rl 1 | perl -ne 'print if !$seen{($_ =~ s/^\s*[0-9]+\s+//r)}++' | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) local ret=$? if [ -n "$selected" ]; then diff --git a/test/test_go.rb b/test/test_go.rb index 765108ca..83d189f5 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -1839,15 +1839,18 @@ module TestShell tmux.send_keys 'echo 1st', :Enter; tmux.prepare tmux.send_keys 'echo 2nd', :Enter; tmux.prepare tmux.send_keys 'echo 3d', :Enter; tmux.prepare - tmux.send_keys 'echo 3rd', :Enter; tmux.prepare + 3.times { tmux.send_keys 'echo 3rd', :Enter; tmux.prepare } tmux.send_keys 'echo 4th', :Enter retries do tmux.prepare tmux.send_keys 'C-r' tmux.until { |lines| lines.match_count.positive? } end - tmux.send_keys 'C-r' tmux.send_keys '3d' + # Duplicates removed: 3d (1) + 3rd (1) => 2 matches + tmux.until { |lines| lines.match_count == 2 } + tmux.until { |lines| lines[-3].end_with? 'echo 3d' } + tmux.send_keys 'C-r' tmux.until { |lines| lines[-3].end_with? 'echo 3rd' } tmux.send_keys :Enter tmux.until { |lines| lines[-1] == 'echo 3rd' }