diff --git a/lua/copilot-lsp/nes/ui.lua b/lua/copilot-lsp/nes/ui.lua index cd9395c..5176891 100644 --- a/lua/copilot-lsp/nes/ui.lua +++ b/lua/copilot-lsp/nes/ui.lua @@ -5,6 +5,7 @@ local M = {} ---@param ns_id integer local function _dismiss_suggestion_ui(bufnr, suggestion_ui, ns_id) pcall(vim.api.nvim_win_close, suggestion_ui.preview_winnr, true) + pcall(vim.api.nvim_win_close, suggestion_ui.hint_winnr, true) pcall(vim.api.nvim_buf_clear_namespace, bufnr, ns_id, 0, -1) end @@ -59,6 +60,13 @@ function M._calculate_lines(suggestion) row = suggestion.range["end"].line + deleted_lines_count + 1, } + -- Calculate positions for hint window + ---@type nes.FloatWin + local hint_win = { + row = (suggestion.range["end"].line + same_line) - vim.api.nvim_win_get_cursor(0)[1] - 1, + height = 1, + } + return { deleted_lines_count = deleted_lines_count, added_lines = added_lines, @@ -67,6 +75,7 @@ function M._calculate_lines(suggestion) delete_extmark = delete_extmark, virt_lines_extmark = virt_lines_extmark, float_win = float_win, + hint_win = hint_win, } end @@ -135,6 +144,27 @@ function M._display_next_suggestion(edits, ns_id) ui.preview_winnr = preview_winnr end + local hint_bufnr = vim.api.nvim_create_buf(false, true) + vim.api.nvim_buf_set_lines(hint_bufnr, 0, -1, false, { " ⇥ Accept" }) + + vim.bo[hint_bufnr].modifiable = false + vim.bo[hint_bufnr].buflisted = false + vim.bo[hint_bufnr].buftype = "nofile" + vim.bo[hint_bufnr].bufhidden = "wipe" + + local hint_winnr = vim.api.nvim_open_win(hint_bufnr, false, { + relative = "cursor", + width = 10, + height = lines.hint_win.height, + row = lines.hint_win.row, + col = 0, + zindex = 150, -- above ins-completion, below messages + style = "minimal", + border = "none", + }) + + ui.hint_winnr = hint_winnr + suggestion.ui = ui vim.b[bufnr].nes_state = suggestion diff --git a/lua/copilot-lsp/types.lua b/lua/copilot-lsp/types.lua index 6e3e9dd..e283bcb 100644 --- a/lua/copilot-lsp/types.lua +++ b/lua/copilot-lsp/types.lua @@ -11,6 +11,7 @@ ---@class nes.EditSuggestionUI ---@field preview_winnr? integer +---@field hint_winnr? integer ---@class nes.DeleteExtmark --- Holds row information for delete highlight extmark. @@ -36,3 +37,4 @@ ---@field delete_extmark nes.DeleteExtmark ---@field virt_lines_extmark nes.VirtLinesExtmark ---@field float_win nes.FloatWin +---@field hint_win nes.FloatWin