diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2020-03-29 21:26:52 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2020-03-29 21:30:37 +0900 |
commit | 18261fe31cf1270f9aa783f99bbdbca343f89479 (patch) | |
tree | f7301ce7be8c5b80761ceeed6d75669766aea364 | |
parent | 079046863c0a9f5bc37d629bab02dccffcf329bc (diff) |
[shell] Update CTRL-R to remove duplicate commands
Close #1940
Related: #1363 #749 #270 #49 #88 #492 #600
-rw-r--r-- | shell/key-bindings.bash | 2 | ||||
-rw-r--r-- | shell/key-bindings.zsh | 2 | ||||
-rwxr-xr-x | test/test_go.rb | 7 |
3 files changed, 7 insertions, 4 deletions
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' } |