yank fix
This commit is contained in:
parent
12c1efd858
commit
387365e945
120
after/plugin/yank.lua
Normal file
120
after/plugin/yank.lua
Normal file
@ -0,0 +1,120 @@
|
||||
local M = {}
|
||||
|
||||
local augroup = vim.api.nvim_create_augroup("deferClip", {})
|
||||
|
||||
local entries = {
|
||||
first = 1,
|
||||
last = 1,
|
||||
}
|
||||
|
||||
local active_entry = {}
|
||||
|
||||
|
||||
local function add_entry(entry)
|
||||
entries[entries.last] = entry
|
||||
entries.last = entries.last + 1
|
||||
end
|
||||
|
||||
local function pop_entry()
|
||||
if entries.first < entries.last then
|
||||
local entry = entries[entries.first]
|
||||
entries[entries.first] = nil
|
||||
entries.first = entries.first + 1
|
||||
return entry
|
||||
end
|
||||
end
|
||||
|
||||
local function sync_from()
|
||||
vim.fn.jobstart({ "win32yank.exe", "-o", "--lf" }, {
|
||||
stdout_buffered = true,
|
||||
on_stdout = function(_, data)
|
||||
active_entry = { lines = data, regtype = "v" }
|
||||
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
local sync_to
|
||||
do
|
||||
local cur_sync_job
|
||||
local function sync_next(entry)
|
||||
local chan = vim.fn.jobstart({ "win32yank.exe", "-i" }, {
|
||||
on_exit = function(_)
|
||||
local next_entry = pop_entry()
|
||||
if next_entry then
|
||||
|
||||
sync_next(next_entry)
|
||||
else
|
||||
cur_sync_job = nil
|
||||
end
|
||||
end,
|
||||
})
|
||||
cur_sync_job = chan
|
||||
|
||||
vim.fn.chansend(chan, entry.lines)
|
||||
vim.fn.chanclose(chan, "stdin")
|
||||
end
|
||||
|
||||
|
||||
sync_to = function()
|
||||
if cur_sync_job then
|
||||
return
|
||||
|
||||
else
|
||||
local entry = pop_entry()
|
||||
|
||||
if entry then
|
||||
sync_next(entry)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function M.copy(lines, regtype)
|
||||
|
||||
add_entry({ lines = lines, regtype = regtype })
|
||||
active_entry = { lines = lines, regtype = regtype }
|
||||
sync_to()
|
||||
end
|
||||
|
||||
function M.get_active()
|
||||
return { active_entry.lines, active_entry.regtype }
|
||||
|
||||
end
|
||||
|
||||
function M.setup()
|
||||
vim.api.nvim_exec(
|
||||
[[
|
||||
function s:copy(lines, regtype)
|
||||
call luaeval('require("core.vim.deferclip").copy(_A[1], _A[2])', [a:lines, a:regtype])
|
||||
endfunction
|
||||
function s:get_active()
|
||||
call luaeval('require("core.vim.deferclip").get_active()')
|
||||
endfunction
|
||||
|
||||
let g:clipboard = {
|
||||
\ 'name': 'deferClip',
|
||||
\ 'copy': {
|
||||
\ '+': {lines, regtype -> s:copy(lines, regtype)},
|
||||
\ '*': {lines, regtype -> s:copy(lines, regtype)},
|
||||
\ },
|
||||
\ 'paste': {
|
||||
\ '+': {-> s:get_active()},
|
||||
\ '*': {-> s:get_active()},
|
||||
\ },
|
||||
\ }
|
||||
|
||||
]],
|
||||
|
||||
false
|
||||
)
|
||||
vim.api.nvim_create_autocmd({ "FocusGained", "VimEnter" }, {
|
||||
group = augroup,
|
||||
callback = sync_from,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
return M
|
@ -54,7 +54,7 @@ return {
|
||||
vim.api.nvim_set_hl(0, group, {})
|
||||
end
|
||||
end,
|
||||
enabled = false,
|
||||
enabled = true,
|
||||
},
|
||||
|
||||
{
|
||||
@ -69,7 +69,7 @@ return {
|
||||
|
||||
vim.cmd.colorscheme 'rose-pine-moon'
|
||||
end,
|
||||
enabled = true,
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user