ivy.nvim/lua/ivy/controller.lua

94 lines
2.1 KiB
Lua
Raw Permalink Normal View History

2022-07-10 20:07:33 +00:00
local window = require "ivy.window"
local prompt = require "ivy.prompt"
local utils = require "ivy.utils"
2022-07-10 20:07:33 +00:00
local controller = {}
controller.items = nil
controller.callback = nil
controller.run = function(name, items, callback)
2022-07-10 20:07:33 +00:00
controller.callback = callback
controller.items = items
window.initialize()
2022-09-04 15:13:02 +00:00
window.set_items { { content = "-- Loading ---" } }
vim.api.nvim_buf_set_name(window.get_buffer(), name)
2022-07-10 20:07:33 +00:00
controller.input ""
end
controller.input = function(char)
prompt.input(char)
controller.update(prompt.text())
2022-07-10 20:07:33 +00:00
end
controller.search = function(value)
prompt.set(value)
controller.update(prompt.text())
end
controller.paste = function()
controller.search(prompt.text() .. vim.fn.getreg "+p")
end
controller.update = function(text)
vim.schedule(function()
window.set_items(controller.items(text))
2022-09-04 15:13:02 +00:00
vim.cmd "syntax clear IvyMatch"
if #text > 0 then
-- Escape characters so they do not throw an error when vim tries to use
-- the "text" as a regex
local escaped_text = string.gsub(text, "([-/\\])", "\\%1")
vim.cmd("syntax match IvyMatch '[" .. escaped_text .. "]'")
end
end)
2022-07-10 20:07:33 +00:00
end
controller.complete = function(action)
vim.api.nvim_set_current_win(window.origin)
controller.callback(window.get_current_selection(), action)
2022-07-10 20:07:33 +00:00
controller.destroy()
end
controller.checkpoint = function()
vim.api.nvim_set_current_win(window.origin)
controller.callback(window.get_current_selection(), utils.actions.CHECKPOINT)
2022-07-10 20:07:33 +00:00
vim.api.nvim_set_current_win(window.window)
end
controller.next = function()
local max = vim.api.nvim_buf_line_count(window.buffer) - 1
if window.index == max then
return
end
2022-07-10 20:07:33 +00:00
window.index = window.index + 1
window.update()
end
controller.previous = function()
if window.index == 0 then
return
end
2022-07-10 20:07:33 +00:00
window.index = window.index - 1
window.update()
end
controller.origin = function()
return vim.api.nvim_win_get_buf(window.origin)
end
2022-07-10 20:07:33 +00:00
controller.destroy = function()
controller.items = nil
controller.callback = nil
window.destroy()
prompt.destroy()
end
return controller