From bc07b64c7d749b98cde74669322cc8159ae00095 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Sat, 11 Apr 2026 19:37:51 -0600 Subject: [PATCH] feat: center help box, auto-dismiss after 2s, bold help hint --- lua/tiny-debugger/help.lua | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/lua/tiny-debugger/help.lua b/lua/tiny-debugger/help.lua index 9f37e79..5f35691 100644 --- a/lua/tiny-debugger/help.lua +++ b/lua/tiny-debugger/help.lua @@ -4,6 +4,7 @@ local M = {} local win_id = nil local buf_id = nil +local timer = nil local modal_info = { { "continue", "Continue" }, @@ -16,7 +17,6 @@ local modal_info = { { "eval", "Eval in REPL" }, { "terminate", "Quit debugging" }, { "restart", "Restart session" }, - { "help", "Show this help" }, } local global_info = { @@ -49,11 +49,21 @@ local function build_content() if key then add(key, pair[2]) end end + -- highlight line at the bottom + local help_key = config.opts.keys.help or "?" lines[#lines + 1] = "" + lines[#lines + 1] = " Press " .. help_key .. " for help" + lines[#lines + 1] = "" + return lines, width + 2 end function M.close() + if timer then + timer:stop() + timer:close() + timer = nil + end if win_id and vim.api.nvim_win_is_valid(win_id) then vim.api.nvim_win_close(win_id, true) end @@ -68,29 +78,39 @@ function M.open() M.close() local lines, width = build_content() + local height = #lines buf_id = vim.api.nvim_create_buf(false, true) vim.api.nvim_buf_set_lines(buf_id, 0, -1, false, lines) + + -- highlight the "Press ? for help" line + local hl_line = height - 2 + vim.api.nvim_buf_add_highlight(buf_id, -1, "Bold", hl_line, 0, -1) + vim.bo[buf_id].modifiable = false vim.bo[buf_id].bufhidden = "wipe" + -- center the float + local ed_w = vim.o.columns + local ed_h = vim.o.lines + local row = math.floor((ed_h - height) / 2) + local col = math.floor((ed_w - width) / 2) + win_id = vim.api.nvim_open_win(buf_id, false, { relative = "editor", - anchor = "SE", - row = vim.o.lines - 2, - col = vim.o.columns, + row = row, + col = col, width = width, - height = #lines, + height = height, style = "minimal", border = "rounded", focusable = false, noautocmd = true, }) - vim.api.nvim_create_autocmd({ "CursorMoved", "InsertEnter", "CmdlineEnter" }, { - once = true, - callback = function() M.close() end, - }) + -- auto-close after 2 seconds + timer = vim.uv.new_timer() + timer:start(2000, 0, vim.schedule_wrap(function() M.close() end)) end function M.is_open()