goto-preview icon indicating copy to clipboard operation
goto-preview copied to clipboard

[FEATURE] Close floating window when cursor leaves buffer

Open Leandros opened this issue 1 year ago • 3 comments

Is your feature request related to a problem? Please describe. Often I'd like to take a peek at an implementation, and close the opened floating window from goto-preview when I don't have it focused anymore. It would be great if unfocusing it could close it automatically.

Describe the solution you'd like An option in the config to close floating buffers when leaving focus.

Describe alternatives you've considered I've tried implementing it myself using the post_open_hook, but I didn't manage to get a working solution.

post_open_hook = function(bufid, win)
  print('post_open_hook | bufid: ' .. vim.inspect(bufid) .. ' | win: ' .. vim.inspect(win))
  vim.api.nvim_create_autocmd({'WinLeave'}, {
    buffer = bufid,
    callback = function(ev)
      vim.api.nvim_win_close(win, false)
    end,
  })
end,

Thank you!

Leandros avatar Oct 30 '23 13:10 Leandros

The above version works the first time, but the second time the following errors occur:

image

Leandros avatar Oct 30 '23 13:10 Leandros

@Leandros try to return true from your callback. It should delete autocmd.

And also, I think it's useful to mark the buffer as nomodifiable in the preview window. Together with closing the preview window on WinLeave event, it works well for me:

post_open_hook = function(buf, win)
            local orig_state = vim.api.nvim_buf_get_option(buf, 'modifiable')
            vim.api.nvim_buf_set_option(buf, 'modifiable', false)
            vim.api.nvim_create_autocmd({ 'WinLeave' }, {
                buffer = buf,
                callback = function()
                    vim.api.nvim_win_close(win, false)
                    vim.api.nvim_buf_set_option(buf, 'modifiable', orig_state)
                    return true
                end,
            })
        end

vladimir-popov avatar Jan 05 '24 16:01 vladimir-popov

@vladimir-popov's solution is the way to go. The current ergonomics of goto-preview are exactly how I want them to be for my use-case. Hooks are provided so everyone else can implement their own flavour of behaviours. An idea would be to add community hooks to the repo that are maintained by the community that can be more easily set than copying over hook implementations all over. I'll give this some more thought

rmagatti avatar Jan 14 '24 00:01 rmagatti