From 525040238e6b7cdec6b99962a60c8e0ccbd2b2e0 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 2 Nov 2019 19:41:59 +0900 Subject: [PATCH] Fix behavior of 'deselect-all' to only deselect matches To make it consistent with select-all and toggle-all. Close #1364 --- src/terminal.go | 8 ++++++-- test/test_go.rb | 10 ++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/terminal.go b/src/terminal.go index 34df2105..4f66fdc0 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -1837,8 +1837,12 @@ func (t *Terminal) Loop() { } case actDeselectAll: if t.multi > 0 { - t.selected = make(map[int32]selectedItem) - t.version++ + for i := 0; i < t.merger.Length() && len(t.selected) > 0; i++ { + item := t.merger.Get(i).item + if _, found := t.selected[item.Index()]; found { + t.deselectItem(item) + } + } req(reqList, reqInfo) } case actToggle: diff --git a/test/test_go.rb b/test/test_go.rb index 2cfbcfdd..9282f9ee 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -865,16 +865,22 @@ class TestGoFZF < TestBase tmux.until { |lines| lines[-2].include? '(100)' } tmux.send_keys :Tab, :Tab tmux.until { |lines| lines[-2].include? '(98)' } + tmux.send_keys '100' + tmux.until { |lines| lines.match_count == 1 } + tmux.send_keys 'C-d' + tmux.until { |lines| lines[-2].include? '(97)' } + tmux.send_keys 'C-u' + tmux.until { |lines| lines.match_count == 100 } tmux.send_keys 'C-d' tmux.until { |lines| !lines[-2].include? '(' } - tmux.send_keys :Tab, :Tab + tmux.send_keys :BTab, :BTab tmux.until { |lines| lines[-2].include? '(2)' } tmux.send_keys 0 tmux.until { |lines| lines[-2].include? '10/100' } tmux.send_keys 'C-a' tmux.until { |lines| lines[-2].include? '(12)' } tmux.send_keys :Enter - assert_equal %w[2 1 10 20 30 40 50 60 70 80 90 100], + assert_equal %w[1 2 10 20 30 40 50 60 70 80 90 100], readonce.split($INPUT_RECORD_SEPARATOR) end