removed plugin
This commit is contained in:
1 parent
30f16b554b
commit
2e78cb9d33
4 files changed
+374
-12
No files matched your search
@@ -102,6 +102,7 @@ ctermfg
|
|||||||
cursorcolumn
|
cursorcolumn
|
||||||
cursorline
|
cursorline
|
||||||
cust_
|
cust_
|
||||||
|
customlist
|
||||||
cword
|
cword
|
||||||
dapui
|
dapui
|
||||||
darcula
|
darcula
|
||||||
@@ -169,6 +170,7 @@ gerrand
|
|||||||
getbufinfo
|
getbufinfo
|
||||||
getcmdline
|
getcmdline
|
||||||
getcmdtype
|
getcmdtype
|
||||||
|
getcompletion
|
||||||
getcwd
|
getcwd
|
||||||
getreg
|
getreg
|
||||||
gettype
|
gettype
|
||||||
@@ -271,6 +273,7 @@ mfussenegger
|
|||||||
mhartington
|
mhartington
|
||||||
mhinz
|
mhinz
|
||||||
milewski
|
milewski
|
||||||
|
minicompletion_disable
|
||||||
minipairs
|
minipairs
|
||||||
minipairs_cr
|
minipairs_cr
|
||||||
minisnippets
|
minisnippets
|
||||||
@@ -322,6 +325,7 @@ nvim
|
|||||||
nvim_feedkeys
|
nvim_feedkeys
|
||||||
nvimrc
|
nvimrc
|
||||||
olivercederborg
|
olivercederborg
|
||||||
|
omni
|
||||||
omnifunc
|
omnifunc
|
||||||
omnisharp
|
omnisharp
|
||||||
openai_params
|
openai_params
|
||||||
@@ -357,6 +361,7 @@ reflog
|
|||||||
reindent_linewise
|
reindent_linewise
|
||||||
reineke
|
reineke
|
||||||
relativenumber
|
relativenumber
|
||||||
|
require
|
||||||
ringbuf
|
ringbuf
|
||||||
rktjmp
|
rktjmp
|
||||||
rustfmt
|
rustfmt
|
||||||
@@ -390,11 +395,13 @@ softtabstop
|
|||||||
splitbelow
|
splitbelow
|
||||||
splitright
|
splitright
|
||||||
starlark
|
starlark
|
||||||
|
startswith
|
||||||
statox
|
statox
|
||||||
statusline
|
statusline
|
||||||
stdpath
|
stdpath
|
||||||
stevearc
|
stevearc
|
||||||
stlnc
|
stlnc
|
||||||
|
strlen
|
||||||
stroustrup
|
stroustrup
|
||||||
struct
|
struct
|
||||||
strwidth
|
strwidth
|
||||||
@@ -423,6 +430,7 @@ to_vimscript
|
|||||||
topdelete
|
topdelete
|
||||||
tpope
|
tpope
|
||||||
treesitter
|
treesitter
|
||||||
|
trimempty
|
||||||
truecolor
|
truecolor
|
||||||
tspunctbracket
|
tspunctbracket
|
||||||
tspunctdelimiter
|
tspunctdelimiter
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ vim.list_extend(
|
|||||||
{src = "https://github.com/rcarriga/nvim-dap-ui"},
|
{src = "https://github.com/rcarriga/nvim-dap-ui"},
|
||||||
{src = "https://github.com/rktjmp/shipwright.nvim"},
|
{src = "https://github.com/rktjmp/shipwright.nvim"},
|
||||||
{src = "https://github.com/sgraves76/cppman.nvim"},
|
{src = "https://github.com/sgraves76/cppman.nvim"},
|
||||||
{src = "https://github.com/stevearc/dressing.nvim"},
|
|
||||||
{src = "https://github.com/ten3roberts/window-picker.nvim"},
|
{src = "https://github.com/ten3roberts/window-picker.nvim"},
|
||||||
{src = "https://github.com/tpope/vim-dispatch"},
|
{src = "https://github.com/tpope/vim-dispatch"},
|
||||||
{src = "https://github.com/tpope/vim-fugitive"}
|
{src = "https://github.com/tpope/vim-fugitive"}
|
||||||
|
|||||||
@@ -17,14 +17,4 @@
|
|||||||
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
--
|
--
|
||||||
require("dressing").setup {
|
require("darcula.ui.input").setup()
|
||||||
input = {
|
|
||||||
relative = "editor",
|
|
||||||
win_options = {
|
|
||||||
winhighlight = "Title:Pmenu"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
select = {
|
|
||||||
relative = "editor"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,365 @@
|
|||||||
|
-- The MIT License (MIT)
|
||||||
|
--
|
||||||
|
-- Copyright © 2026 Scott E. Graves <scott.e.graves@protonmail.com>
|
||||||
|
--
|
||||||
|
-- Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
-- and associated documentation files (the “Software”), to deal in the Software without restriction,
|
||||||
|
-- including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
-- sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
-- furnished to do so, subject to the following conditions:
|
||||||
|
--
|
||||||
|
-- The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
-- substantial portions of the Software.
|
||||||
|
--
|
||||||
|
-- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
-- BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
-- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
--
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
local namespace = vim.api.nvim_create_namespace("DarculaInput")
|
||||||
|
local history = {}
|
||||||
|
local queue = {}
|
||||||
|
local context
|
||||||
|
|
||||||
|
local function title(prompt)
|
||||||
|
prompt = vim.trim(prompt or "Input")
|
||||||
|
prompt = prompt:gsub(":$", "")
|
||||||
|
return " " .. prompt .. " "
|
||||||
|
end
|
||||||
|
|
||||||
|
local function editor_width(prompt, default)
|
||||||
|
local columns = vim.o.columns
|
||||||
|
local minimum = math.max(20, math.floor(columns * 0.2))
|
||||||
|
local maximum = math.min(140, math.floor(columns * 0.9), columns - 4)
|
||||||
|
local preferred = math.max(
|
||||||
|
40,
|
||||||
|
vim.api.nvim_strwidth(prompt) + 4,
|
||||||
|
vim.api.nvim_strwidth(default) + 2
|
||||||
|
)
|
||||||
|
|
||||||
|
minimum = math.min(minimum, maximum)
|
||||||
|
return math.max(minimum, math.min(preferred, maximum))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function cursor_width(prompt, default)
|
||||||
|
local maximum = math.min(80, vim.o.columns - 2)
|
||||||
|
local preferred = math.max(
|
||||||
|
32,
|
||||||
|
vim.api.nvim_strwidth(title(prompt)),
|
||||||
|
vim.api.nvim_strwidth(default) + 2
|
||||||
|
)
|
||||||
|
return math.min(preferred, maximum)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function window_config(opts, prompt, default)
|
||||||
|
if opts.scope == "cursor" or opts.scope == "line" then
|
||||||
|
local width = cursor_width(prompt, default)
|
||||||
|
local position = vim.fn.screenpos(0, vim.fn.line("."), vim.fn.col("."))
|
||||||
|
local screen_column = math.max(0, (position.curscol or position.col or 1) - 1)
|
||||||
|
local column = 0
|
||||||
|
if screen_column + width + 2 > vim.o.columns then
|
||||||
|
column = vim.o.columns - screen_column - width - 2
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
relative = "cursor",
|
||||||
|
row = position.row == 1 and 1 or 0,
|
||||||
|
col = column,
|
||||||
|
width = width
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local width = editor_width(prompt, default)
|
||||||
|
return {
|
||||||
|
relative = "editor",
|
||||||
|
row = math.max(0, math.floor((vim.o.lines - 3) / 2)),
|
||||||
|
col = math.max(0, math.floor((vim.o.columns - width) / 2)),
|
||||||
|
width = width
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_text(text)
|
||||||
|
if not context or not vim.api.nvim_buf_is_valid(context.bufnr) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
text = (text or ""):gsub("\n", " ")
|
||||||
|
vim.api.nvim_buf_set_lines(context.bufnr, 0, -1, false, {text})
|
||||||
|
vim.api.nvim_win_set_cursor(context.winid, {1, #text})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function apply_highlight()
|
||||||
|
if not context or not context.opts.highlight then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local text = vim.api.nvim_buf_get_lines(context.bufnr, 0, 1, false)[1] or ""
|
||||||
|
local highlights
|
||||||
|
if type(context.opts.highlight) == "function" then
|
||||||
|
highlights = context.opts.highlight(text)
|
||||||
|
else
|
||||||
|
highlights = vim.fn[context.opts.highlight](text)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_buf_clear_namespace(context.bufnr, namespace, 0, -1)
|
||||||
|
for _, highlight in ipairs(highlights or {}) do
|
||||||
|
vim.api.nvim_buf_add_highlight(
|
||||||
|
context.bufnr,
|
||||||
|
namespace,
|
||||||
|
highlight[3],
|
||||||
|
0,
|
||||||
|
highlight[1],
|
||||||
|
highlight[2]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function keep_one_line()
|
||||||
|
if not context or not vim.api.nvim_buf_is_valid(context.bufnr) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local lines = vim.api.nvim_buf_get_lines(context.bufnr, 0, -1, false)
|
||||||
|
if #lines <= 1 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
while #lines > 1 do
|
||||||
|
if lines[1]:match("^%s*$") then
|
||||||
|
table.remove(lines, 1)
|
||||||
|
else
|
||||||
|
table.remove(lines)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.api.nvim_buf_set_lines(context.bufnr, 0, -1, false, lines)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function close_completion()
|
||||||
|
if vim.fn.pumvisible() == 1 then
|
||||||
|
local key = vim.api.nvim_replace_termcodes("<C-e>", true, false, true)
|
||||||
|
vim.api.nvim_feedkeys(key, "n", false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function show_next()
|
||||||
|
if context or #queue == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local request = table.remove(queue, 1)
|
||||||
|
local opts = request.opts
|
||||||
|
local prompt = opts.prompt or "Input"
|
||||||
|
local default = (opts.default or ""):gsub("\n", " ")
|
||||||
|
local position = window_config(opts, prompt, default)
|
||||||
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
||||||
|
local mode = vim.api.nvim_get_mode().mode:sub(1, 1)
|
||||||
|
local winid = vim.api.nvim_open_win(
|
||||||
|
bufnr,
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
relative = position.relative,
|
||||||
|
row = position.row,
|
||||||
|
col = position.col,
|
||||||
|
width = position.width,
|
||||||
|
height = 1,
|
||||||
|
border = "rounded",
|
||||||
|
style = "minimal",
|
||||||
|
title = title(prompt),
|
||||||
|
title_pos = "left"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
bufnr = bufnr,
|
||||||
|
callback = request.callback,
|
||||||
|
history_index = nil,
|
||||||
|
history_tip = nil,
|
||||||
|
mode = mode,
|
||||||
|
opts = opts,
|
||||||
|
winid = winid
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.bo[bufnr].bufhidden = "wipe"
|
||||||
|
vim.bo[bufnr].filetype = "DarculaInput"
|
||||||
|
vim.bo[bufnr].swapfile = false
|
||||||
|
vim.b[bufnr].minicompletion_disable = true
|
||||||
|
vim.wo[winid].list = true
|
||||||
|
vim.wo[winid].listchars = "precedes:…,extends:…"
|
||||||
|
vim.wo[winid].sidescrolloff = 0
|
||||||
|
vim.wo[winid].winhighlight = "Title:Pmenu"
|
||||||
|
vim.wo[winid].wrap = false
|
||||||
|
|
||||||
|
set_text(default)
|
||||||
|
|
||||||
|
local map_opts = {buffer = bufnr, silent = true}
|
||||||
|
vim.keymap.set("n", "<Esc>", M.cancel, map_opts)
|
||||||
|
vim.keymap.set("n", "<CR>", M.confirm, map_opts)
|
||||||
|
vim.keymap.set("i", "<C-c>", M.cancel, map_opts)
|
||||||
|
vim.keymap.set("i", "<CR>", M.confirm, map_opts)
|
||||||
|
vim.keymap.set("i", "<Up>", M.history_previous, map_opts)
|
||||||
|
vim.keymap.set("i", "<Down>", M.history_next, map_opts)
|
||||||
|
|
||||||
|
local has_cmp, cmp = pcall(require, "cmp")
|
||||||
|
if has_cmp then
|
||||||
|
cmp.setup.buffer {
|
||||||
|
enabled = opts.completion ~= nil,
|
||||||
|
sources = {{name = "omni"}}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.completion then
|
||||||
|
vim.bo[bufnr].completefunc = "v:lua.require'darcula.ui.input'.completefunc"
|
||||||
|
if not has_cmp or not pcall(require, "cmp_omni") then
|
||||||
|
vim.keymap.set("i", "<Tab>", M.trigger_completion, {
|
||||||
|
buffer = bufnr,
|
||||||
|
expr = true,
|
||||||
|
silent = true
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({"TextChanged", "TextChangedI"}, {
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = function()
|
||||||
|
keep_one_line()
|
||||||
|
apply_highlight()
|
||||||
|
end
|
||||||
|
})
|
||||||
|
vim.api.nvim_create_autocmd("BufLeave", {
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = function()
|
||||||
|
if context and context.bufnr == bufnr and not context.closing then
|
||||||
|
M.cancel()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
once = true
|
||||||
|
})
|
||||||
|
|
||||||
|
apply_highlight()
|
||||||
|
vim.cmd("startinsert!")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function finish(value)
|
||||||
|
if not context or context.closing then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
close_completion()
|
||||||
|
local finished = context
|
||||||
|
finished.closing = true
|
||||||
|
context = nil
|
||||||
|
|
||||||
|
if value ~= nil and history[#history] ~= value then
|
||||||
|
table.insert(history, value)
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.api.nvim_win_is_valid(finished.winid) then
|
||||||
|
vim.api.nvim_win_close(finished.winid, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
if finished.mode ~= "i" then
|
||||||
|
vim.cmd("stopinsert")
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.schedule(show_next)
|
||||||
|
finished.callback(value)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.confirm()
|
||||||
|
if not context then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local text = vim.api.nvim_buf_get_lines(context.bufnr, 0, 1, false)[1] or ""
|
||||||
|
finish(text)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.cancel()
|
||||||
|
finish(context and context.opts.cancelreturn or nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.history_previous()
|
||||||
|
if not context or #history == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if context.history_index == nil then
|
||||||
|
context.history_tip =
|
||||||
|
vim.api.nvim_buf_get_lines(context.bufnr, 0, 1, false)[1] or ""
|
||||||
|
context.history_index = #history
|
||||||
|
elseif context.history_index > 1 then
|
||||||
|
context.history_index = context.history_index - 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set_text(history[context.history_index])
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.history_next()
|
||||||
|
if not context or not context.history_index then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if context.history_index == #history then
|
||||||
|
context.history_index = nil
|
||||||
|
set_text(context.history_tip)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
context.history_index = context.history_index + 1
|
||||||
|
set_text(history[context.history_index])
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.completefunc(find_start, base)
|
||||||
|
local completion = context and context.opts.completion
|
||||||
|
if not completion then
|
||||||
|
return find_start == 1 and 0 or {}
|
||||||
|
end
|
||||||
|
if find_start == 1 then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local pieces = vim.split(completion, ",", {plain = true})
|
||||||
|
if pieces[1] == "custom" or pieces[1] == "customlist" then
|
||||||
|
local func = pieces[2]
|
||||||
|
local result
|
||||||
|
if vim.startswith(func, "v:lua.") then
|
||||||
|
local lua_func = assert(loadstring("return " .. func:sub(7) .. "(...)"))
|
||||||
|
result = lua_func(base, base, vim.fn.strlen(base))
|
||||||
|
else
|
||||||
|
result = vim.fn[func](base, base, vim.fn.strlen(base))
|
||||||
|
end
|
||||||
|
return pieces[1] == "custom" and
|
||||||
|
vim.split(result, "\n", {plain = true, trimempty = true}) or
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
|
local ok, result = pcall(vim.fn.getcompletion, base, completion)
|
||||||
|
return ok and result or {}
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.trigger_completion()
|
||||||
|
return vim.fn.pumvisible() == 1 and "<C-n>" or "<C-x><C-u>"
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.input(opts, callback)
|
||||||
|
vim.validate("opts", opts, "table", true)
|
||||||
|
vim.validate("callback", callback, "function")
|
||||||
|
table.insert(queue, {opts = opts or {}, callback = callback})
|
||||||
|
|
||||||
|
if vim.v.vim_did_enter == 0 then
|
||||||
|
vim.schedule(show_next)
|
||||||
|
else
|
||||||
|
show_next()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.setup()
|
||||||
|
vim.ui.input = M.input
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
Reference in new issue
Block a user