summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-11-17 19:13:37 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-11-17 19:13:37 +0900
commit29e67d307a051c2ec544f530869e25d36a0050f3 (patch)
tree5a4829b8e1ae2e9dbc5fdcbee3dbf5264321766b
parent7320b7df62039c879c4f609bca946ea09b438a98 (diff)
Fix crash when preview window is hidden on focus event
-rw-r--r--src/terminal.go11
-rwxr-xr-xtest/test_go.rb7
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