diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2017-07-28 01:39:25 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2017-07-28 01:39:25 +0900 |
| commit | a0a3c349c90d6210edec28d4d528a82f764268f1 (patch) | |
| tree | 542a0ea4dd2e11c02b47d5fb79d3c186e16f916c /src | |
| parent | bc3983181d992c564e069791b5c6549bde9bfeb3 (diff) | |
| download | fzf-a0a3c349c90d6210edec28d4d528a82f764268f1.tar.gz | |
Update preview window when selection has changed
Close #995
Diffstat (limited to 'src')
| -rw-r--r-- | src/terminal.go | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/terminal.go b/src/terminal.go index d6d21551..36cc7c2b 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -101,6 +101,7 @@ type Terminal struct { printer func(string) merger *Merger selected map[int32]selectedItem + version int64 reqBox *util.EventBox preview previewOpts previewer previewer @@ -1257,6 +1258,24 @@ func (t *Terminal) truncateQuery() { t.cx = util.Constrain(t.cx, 0, len(t.input)) } +func (t *Terminal) selectItem(item *Item) { + t.selected[item.Index()] = selectedItem{time.Now(), item} + t.version++ +} + +func (t *Terminal) deselectItem(item *Item) { + delete(t.selected, item.Index()) + t.version++ +} + +func (t *Terminal) toggleItem(item *Item) { + if _, found := t.selected[item.Index()]; !found { + t.selectItem(item) + } else { + t.deselectItem(item) + } +} + // Loop is called to start Terminal I/O func (t *Terminal) Loop() { // prof := profile.Start(profile.ProfilePath("/tmp/")) @@ -1359,6 +1378,7 @@ func (t *Terminal) Loop() { go func() { var focused *Item + var version int64 for { t.reqBox.Wait(func(events *util.Events) { defer events.Clear() @@ -1375,7 +1395,8 @@ func (t *Terminal) Loop() { case reqList: t.printList() currentFocus := t.currentItem() - if currentFocus != focused { + if currentFocus != focused || version != t.version { + version = t.version focused = currentFocus if t.isPreviewEnabled() { _, list := t.buildPlusList(t.preview.command, false) @@ -1441,22 +1462,9 @@ func (t *Terminal) Loop() { } } } - selectItem := func(item *Item) bool { - if _, found := t.selected[item.Index()]; !found { - t.selected[item.Index()] = selectedItem{time.Now(), item} - return true - } - return false - } - toggleY := func(y int) { - item := t.merger.Get(y).item - if !selectItem(item) { - delete(t.selected, item.Index()) - } - } toggle := func() { if t.cy < t.merger.Length() { - toggleY(t.cy) + t.toggleItem(t.merger.Get(t.cy).item) req(reqInfo) } } @@ -1570,16 +1578,14 @@ func (t *Terminal) Loop() { case actSelectAll: if t.multi { for i := 0; i < t.merger.Length(); i++ { - item := t.merger.Get(i).item - selectItem(item) + t.selectItem(t.merger.Get(i).item) } req(reqList, reqInfo) } case actDeselectAll: if t.multi { for i := 0; i < t.merger.Length(); i++ { - item := t.merger.Get(i) - delete(t.selected, item.Index()) + t.deselectItem(t.merger.Get(i).item) } req(reqList, reqInfo) } @@ -1591,7 +1597,7 @@ func (t *Terminal) Loop() { case actToggleAll: if t.multi { for i := 0; i < t.merger.Length(); i++ { - toggleY(i) + t.toggleItem(t.merger.Get(i).item) } req(reqList, reqInfo) } |
