nvim: scope now supports vim.ui.input
This commit is contained in:
parent
35a9439ed4
commit
ea7eb8c056
@ -1,4 +1,4 @@
|
|||||||
-- telescope without telescope
|
-- telescope without telescope80
|
||||||
-- depends on: fzf, bat
|
-- depends on: fzf, bat
|
||||||
|
|
||||||
M = {}
|
M = {}
|
||||||
@ -28,7 +28,7 @@ end
|
|||||||
---@field mode ("window" | "float")? Sets the window used to show the scope. Defaults to "window".
|
---@field mode ("window" | "float")? Sets the window used to show the scope. Defaults to "window".
|
||||||
--- - "window": fills the entire window
|
--- - "window": fills the entire window
|
||||||
--- - "float": floating window
|
--- - "float": floating window
|
||||||
---@field float_opts vim.api.keyset.win_config? Options if mode is set to "float".
|
---@field float_opts vim.api.keyset.win_config? Options to pass to `nvim_open_win` if mode is set to "float".
|
||||||
|
|
||||||
---Generic brand fuzzy selector
|
---Generic brand fuzzy selector
|
||||||
---@param choice_gen string | function Lua function or shell command that generates choices to display in fzf.
|
---@param choice_gen string | function Lua function or shell command that generates choices to display in fzf.
|
||||||
@ -112,7 +112,7 @@ end
|
|||||||
--- - format_item (function item -> text)
|
--- - format_item (function item -> text)
|
||||||
--- - kind (string|nil)
|
--- - kind (string|nil)
|
||||||
---@param on_choice fun(item: any|nil, idx: integer|nil)
|
---@param on_choice fun(item: any|nil, idx: integer|nil)
|
||||||
local function picker(items, opts, on_choice)
|
local function select_new(items, opts, on_choice)
|
||||||
vim.validate({
|
vim.validate({
|
||||||
items = { items, 'table', false },
|
items = { items, 'table', false },
|
||||||
on_choice = { on_choice, 'function', false },
|
on_choice = { on_choice, 'function', false },
|
||||||
@ -151,9 +151,65 @@ local function picker(items, opts, on_choice)
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Replacement for `vim.ui.input`.
|
||||||
|
---@param opts table? Additional options. See |input()|
|
||||||
|
--- - prompt (string|nil)
|
||||||
|
--- - default (string|nil)
|
||||||
|
---@param on_confirm function ((input|nil) -> ())
|
||||||
|
local function input_new(opts, on_confirm)
|
||||||
|
vim.validate({
|
||||||
|
opts = { opts, 'table', true },
|
||||||
|
on_confirm = { on_confirm, 'function', false },
|
||||||
|
})
|
||||||
|
|
||||||
|
opts = (opts and not vim.tbl_isempty(opts)) and opts or vim.empty_dict()
|
||||||
|
|
||||||
|
opts.on_confirm = opts.on_confirm or function() end
|
||||||
|
|
||||||
|
local buf = vim.api.nvim_create_buf(false, true)
|
||||||
|
vim.api.nvim_open_win(buf, true,
|
||||||
|
{
|
||||||
|
relative = "cursor",
|
||||||
|
width = 30,
|
||||||
|
height = 1,
|
||||||
|
col = 1,
|
||||||
|
row = 1,
|
||||||
|
border = "rounded",
|
||||||
|
title = opts.prompt,
|
||||||
|
})
|
||||||
|
|
||||||
|
if opts.default then
|
||||||
|
vim.api.nvim_buf_set_lines(buf, 0, 1, true, { opts.default })
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.wo.number = false
|
||||||
|
vim.wo.relativenumber = false
|
||||||
|
vim.cmd [[startinsert!]]
|
||||||
|
|
||||||
|
local map_opts = { noremap = true, buffer = buf }
|
||||||
|
|
||||||
|
local function close_win()
|
||||||
|
vim.api.nvim_win_close(0, false)
|
||||||
|
vim.cmd.stopinsert()
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set({ "i", "n" }, "<Enter>",
|
||||||
|
function()
|
||||||
|
on_confirm(table.concat(vim.api.nvim_buf_get_lines(buf, 0, -1, true), "\n"))
|
||||||
|
close_win()
|
||||||
|
end,
|
||||||
|
map_opts
|
||||||
|
)
|
||||||
|
vim.keymap.set({ "i" }, "<C-c>", function ()
|
||||||
|
on_confirm(nil)
|
||||||
|
close_win()
|
||||||
|
end, map_opts)
|
||||||
|
end
|
||||||
|
|
||||||
---Sets up `vim.ui` hooks to use scope.
|
---Sets up `vim.ui` hooks to use scope.
|
||||||
function M.setup()
|
function M.setup()
|
||||||
vim.ui.select = picker
|
vim.ui.select = select_new
|
||||||
|
vim.ui.input = input_new
|
||||||
end
|
end
|
||||||
|
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user