From fba4a33b57e464db968c62fef5c8be6f2cb42d11 Mon Sep 17 00:00:00 2001 From: Will Hopkins Date: Sun, 20 Apr 2025 13:28:36 -0700 Subject: [PATCH 1/2] feat: add accept hint popup --- lua/copilot-lsp/nes/ui.lua | 22 ++++++++++++++++++++++ lua/copilot-lsp/types.lua | 1 + 2 files changed, 23 insertions(+) diff --git a/lua/copilot-lsp/nes/ui.lua b/lua/copilot-lsp/nes/ui.lua index cd9395c..064f812 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 @@ -135,6 +136,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 = 1, + row = (suggestion.range["end"].line + lines.same_line) - vim.api.nvim_win_get_cursor(0)[1] - 1, + 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..a524ebe 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. From 1e9c3d1317e22f4ced7d2c73edc874cc8d4716d5 Mon Sep 17 00:00:00 2001 From: Will Hopkins Date: Mon, 21 Apr 2025 12:09:04 -0700 Subject: [PATCH 2/2] move hint win row logic to calculate function --- lua/copilot-lsp/nes/ui.lua | 12 ++++++++++-- lua/copilot-lsp/types.lua | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lua/copilot-lsp/nes/ui.lua b/lua/copilot-lsp/nes/ui.lua index 064f812..5176891 100644 --- a/lua/copilot-lsp/nes/ui.lua +++ b/lua/copilot-lsp/nes/ui.lua @@ -60,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, @@ -68,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 @@ -147,8 +155,8 @@ function M._display_next_suggestion(edits, ns_id) local hint_winnr = vim.api.nvim_open_win(hint_bufnr, false, { relative = "cursor", width = 10, - height = 1, - row = (suggestion.range["end"].line + lines.same_line) - vim.api.nvim_win_get_cursor(0)[1] - 1, + height = lines.hint_win.height, + row = lines.hint_win.row, col = 0, zindex = 150, -- above ins-completion, below messages style = "minimal", diff --git a/lua/copilot-lsp/types.lua b/lua/copilot-lsp/types.lua index a524ebe..e283bcb 100644 --- a/lua/copilot-lsp/types.lua +++ b/lua/copilot-lsp/types.lua @@ -37,3 +37,4 @@ ---@field delete_extmark nes.DeleteExtmark ---@field virt_lines_extmark nes.VirtLinesExtmark ---@field float_win nes.FloatWin +---@field hint_win nes.FloatWin