diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2023-11-17 19:13:37 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2023-11-17 19:13:37 +0900 |
commit | 29e67d307a051c2ec544f530869e25d36a0050f3 (patch) | |
tree | 5a4829b8e1ae2e9dbc5fdcbee3dbf5264321766b | |
parent | 7320b7df62039c879c4f609bca946ea09b438a98 (diff) |
Fix crash when preview window is hidden on focus event
-rw-r--r-- | src/terminal.go | 11 | ||||
-rwxr-xr-x | test/test_go.rb | 7 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/terminal.go b/src/terminal.go index 2e6e24b6..fe611fb3 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -475,6 +475,7 @@ type searchRequest struct { type previewRequest struct { template string + pwindow tui.Window pwindowSize tui.TermSize scrollOffset int list []*Item @@ -2794,6 +2795,7 @@ func (t *Terminal) Loop() { for { var items []*Item var commandTemplate string + var pwindow tui.Window var pwindowSize tui.TermSize initialOffset := 0 t.previewBox.Wait(func(events *util.Events) { @@ -2804,6 +2806,7 @@ func (t *Terminal) Loop() { commandTemplate = request.template initialOffset = request.scrollOffset items = request.list + pwindow = request.pwindow pwindowSize = request.pwindowSize } } @@ -2823,8 +2826,8 @@ func (t *Terminal) Loop() { env = append(env, "FZF_PREVIEW_"+lines) env = append(env, columns) env = append(env, "FZF_PREVIEW_"+columns) - env = append(env, fmt.Sprintf("FZF_PREVIEW_TOP=%d", t.tui.Top()+t.pwindow.Top())) - env = append(env, fmt.Sprintf("FZF_PREVIEW_LEFT=%d", t.pwindow.Left())) + env = append(env, fmt.Sprintf("FZF_PREVIEW_TOP=%d", t.tui.Top()+pwindow.Top())) + env = append(env, fmt.Sprintf("FZF_PREVIEW_LEFT=%d", pwindow.Left())) } cmd.Env = env @@ -2952,7 +2955,7 @@ func (t *Terminal) Loop() { if len(command) > 0 && t.canPreview() { _, list := t.buildPlusList(command, false) t.cancelPreview() - t.previewBox.Set(reqPreviewEnqueue, previewRequest{command, t.pwindowSize(), t.evaluateScrollOffset(), list}) + t.previewBox.Set(reqPreviewEnqueue, previewRequest{command, t.pwindow, t.pwindowSize(), t.evaluateScrollOffset(), list}) } } @@ -3250,7 +3253,7 @@ func (t *Terminal) Loop() { if valid { t.cancelPreview() t.previewBox.Set(reqPreviewEnqueue, - previewRequest{t.previewOpts.command, t.pwindowSize(), t.evaluateScrollOffset(), list}) + previewRequest{t.previewOpts.command, t.pwindow, t.pwindowSize(), t.evaluateScrollOffset(), list}) } } else { // Discard the preview content so that it won't accidentally appear diff --git a/test/test_go.rb b/test/test_go.rb index 12e53471..30d5e7b2 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -3020,6 +3020,13 @@ class TestGoFZF < TestBase tmux.send_keys :x tmux.until { |lines| assert(lines.any? { |line| line.include?('[x-foo]') }) } end + + def test_preview_window_hidden_on_focus + tmux.send_keys "seq 3 | #{FZF} --preview 'echo {}' --bind focus:hide-preview", :Enter + tmux.until { |lines| assert_includes lines, '> 1' } + tmux.send_keys :Up + tmux.until { |lines| assert_includes lines, '> 2' } + end end module TestShell |