🪴 my neovim config:)
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

plugin: use prompt buffer for input ui

robin 0c6074a1 be762f07

+22 -20
+22 -20
config/plugin/input.lua
··· 4 4 5 5 vim.g.loaded_input = true 6 6 7 + local old_input = vim.ui.input 8 + 7 9 ---@type fun(opts?: vim.ui.input.Opts, on_confirm: fun(input?: string)) 8 10 ---@diagnostic disable-next-line: duplicate-set-field 9 11 vim.ui.input = function(opts, on_confirm) 12 + if opts.prompt and #vim.split(opts.prompt, "\n") > 1 then 13 + old_input(opts, on_confirm) 14 + return 15 + end 16 + 10 17 local buf = vim.api.nvim_create_buf(false, true) 11 18 ---@type fun(v: string?) 12 - local cb = function(v) 19 + local f = function(v) 13 20 vim.api.nvim_buf_delete(buf, { force = true }) 14 21 vim.cmd.stopinsert() 15 22 on_confirm(v) 16 23 end 17 24 25 + vim.bo[buf].buftype = "prompt" 26 + vim.bo[buf].bufhidden = "wipe" 27 + vim.bo[buf].swapfile = false 28 + 29 + vim.fn.prompt_setprompt(buf, "") 30 + vim.fn.prompt_setcallback(buf, f) 31 + vim.fn.prompt_setinterrupt(buf, f) 32 + 18 33 vim.api.nvim_buf_set_lines(buf, 0, -1, false, { opts.default or "" }) 34 + local offset = vim.o.winborder == "none" and 0 or -1 19 35 local win = vim.api.nvim_open_win(buf, true, { 20 36 relative = "cursor", 21 37 title = opts.prompt, 22 38 height = 1, 23 39 width = 1, 24 - row = 1, 25 - col = 0, 40 + row = offset, 41 + col = offset, 26 42 style = "minimal", 27 43 }) 28 44 vim.api.nvim_set_option_value("wrap", true, { win = win, scope = "local" }) 45 + vim.api.nvim_set_option_value("signcolumn", "no", { win = win, scope = "local" }) 29 46 vim.api.nvim_set_option_value("sidescrolloff", 0, { win = win, scope = "local" }) 47 + local extrawidth = (vim.o.winborder == "none" and 0 or 1) * 2 30 48 vim.api.nvim_create_autocmd({ "CursorMovedI", "InsertEnter" }, { 31 49 buffer = buf, 32 50 callback = function() 33 51 local col = vim.api.nvim_win_get_cursor(win)[2] 34 52 local text = vim.api.nvim_buf_get_lines(buf, 0, -1, false)[1] 35 - vim.api.nvim_win_set_width(win, math.max(col, #text, opts.prompt and #opts.prompt or 0) + 2) 53 + vim.api.nvim_win_set_width(win, math.max(col, #text, opts.prompt and #opts.prompt or 0) + extrawidth) 36 54 end, 37 55 }) 38 56 39 57 vim.api.nvim_cmd({ cmd = "startinsert", bang = true }, {}) 40 - vim.api.nvim_create_autocmd("TextChangedI", { 41 - buffer = buf, 42 - callback = function() 43 - if #vim.api.nvim_buf_get_lines(buf, 0, -1, false) == 1 then 44 - return 45 - end 46 - local input = table.concat(vim.api.nvim_buf_get_lines(buf, 0, -1, false), "") 47 - cb(input) 48 - end, 49 - }) 50 - vim.api.nvim_create_autocmd({ "InsertLeave", "BufLeave" }, { 51 - buffer = buf, 52 - callback = function() 53 - cb(nil) 54 - end, 55 - }) 56 58 end