🪴 my neovim config:)
1
fork

Configure Feed

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

plugin: add `input` plugin

robin c0c47ec2 2a80cebc

+56
+56
config/plugin/input.lua
··· 1 + if vim.g.loaded_input then 2 + return 3 + end 4 + 5 + vim.g.loaded_input = true 6 + 7 + ---@type fun(opts?: vim.ui.input.Opts, on_confirm: fun(input?: string)) 8 + ---@diagnostic disable-next-line: duplicate-set-field 9 + vim.ui.input = function(opts, on_confirm) 10 + local buf = vim.api.nvim_create_buf(false, true) 11 + ---@type fun(v: string?) 12 + local cb = function(v) 13 + vim.api.nvim_buf_delete(buf, { force = true }) 14 + vim.cmd.stopinsert() 15 + on_confirm(v) 16 + end 17 + 18 + vim.api.nvim_buf_set_lines(buf, 0, -1, false, { opts.default or "" }) 19 + local win = vim.api.nvim_open_win(buf, true, { 20 + relative = "cursor", 21 + title = opts.prompt, 22 + height = 1, 23 + width = 1, 24 + row = 1, 25 + col = 0, 26 + style = "minimal", 27 + }) 28 + vim.api.nvim_set_option_value("wrap", true, { win = win, scope = "local" }) 29 + vim.api.nvim_set_option_value("sidescrolloff", 0, { win = win, scope = "local" }) 30 + vim.api.nvim_create_autocmd({ "CursorMovedI", "InsertEnter" }, { 31 + buffer = buf, 32 + callback = function() 33 + local col = vim.api.nvim_win_get_cursor(win)[2] 34 + 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) 36 + end, 37 + }) 38 + 39 + 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 = vim.api.nvim_buf_get_lines(buf, 0, -1, false)[1] 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 + end