diff options
| author | Sebastian Lyng Johansen <seblyng98@gmail.com> | 2023-01-10 11:22:41 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-10 02:22:41 -0800 | 
| commit | 870ca1de52b240926b88f01afa697cd9b119bdac (patch) | |
| tree | 2d2d0ecc78ae968a2a955584f2007e357d7e7ba5 /runtime/syntax/sqlforms.vim | |
| parent | d6cb3328f7e7286fb4aac116ea1bb0e6377fa803 (diff) | |
| download | rneovim-870ca1de52b240926b88f01afa697cd9b119bdac.tar.gz rneovim-870ca1de52b240926b88f01afa697cd9b119bdac.tar.bz2 rneovim-870ca1de52b240926b88f01afa697cd9b119bdac.zip | |
feat(float): open float relative to mouse #21531
Problem:
No easy way to position a LSP hover window relative to mouse.
Solution:
Introduce another option to the `relative` key in `nvim_open_win()`.
With this PR it should be possible to override the handler and do something
similar to this https://github.com/neovim/neovim/pull/19481#issuecomment-1193248674
to have hover information displayed from the mouse.
Test case:
    ```lua
    local util = require('vim.lsp.util')
    local function make_position_param(window, offset_encoding)
        window = window or 0
        local buf = vim.api.nvim_win_get_buf(window)
        local row, col
        local mouse = vim.fn.getmousepos()
        row = mouse.line
        col = mouse.column
        offset_encoding = offset_encoding or util._get_offset_encoding(buf)
        row = row - 1
        local line = vim.api.nvim_buf_get_lines(buf, row, row + 1, true)[1]
        if not line then
            return { line = 0, character = 0 }
        end
        if #line < col then
            return { line = 0, character = 0 }
        end
        col = util._str_utfindex_enc(line, col, offset_encoding)
        return { line = row, character = col }
    end
    local make_params = function(window, offset_encoding)
        window = window or 0
        local buf = vim.api.nvim_win_get_buf(window)
        offset_encoding = offset_encoding or util._get_offset_encoding(buf)
        return {
            textDocument = util.make_text_document_params(buf),
            position = make_position_param(window, offset_encoding),
        }
    end
    local hover_timer = nil
    vim.o.mousemoveevent = true
    vim.keymap.set({ '', 'i' }, '<MouseMove>', function()
        if hover_timer then
            hover_timer:close()
        end
        hover_timer = vim.defer_fn(function()
            hover_timer = nil
            local params = make_params()
            vim.lsp.buf_request(
                0,
                'textDocument/hover',
                params,
                vim.lsp.with(vim.lsp.handlers.hover, {
                    silent = true,
                    focusable = false,
                    relative = 'mouse',
                })
            )
        end, 500)
        return '<MouseMove>'
    end, { expr = true })
    ```
Diffstat (limited to 'runtime/syntax/sqlforms.vim')
0 files changed, 0 insertions, 0 deletions
