Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33588
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
7 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/lua/ivy/backends/ag.lua b/lua/ivy/backends/ag.lua
new file mode 100644
index 0000000..1838f94
--- /dev/null
+++ b/lua/ivy/backends/ag.lua
@@ -0,0 +1,12 @@
+local utils = require "ivy.utils"
+
+local ag = {
+ name = "AG",
+ command = "IvyAg",
+ description = "Run ag to search for content in files",
+ keymap = "<leader>/",
+ items = utils.command_finder "ag",
+ callback = utils.vimgrep_action(),
+}
+
+return ag
diff --git a/lua/ivy/backends/buffers.lua b/lua/ivy/backends/buffers.lua
new file mode 100644
index 0000000..57267ac
--- /dev/null
+++ b/lua/ivy/backends/buffers.lua
@@ -0,0 +1,38 @@
+local libivy = require "ivy.libivy"
+local utils = require "ivy.utils"
+
+local function items(input)
+ local list = {}
+ local buffers = vim.api.nvim_list_bufs()
+ for index = 1, #buffers do
+ local buffer = buffers[index]
+ -- Get the relative path from the current working directory. We need to
+ -- substring +2 to remove the `/` from the start of the path to give us a
+ -- true relative path
+ local buffer_name = vim.api.nvim_buf_get_name(buffer):sub(#vim.fn.getcwd() + 2, -1)
+ local file_type = vim.api.nvim_buf_get_option(buffer, "filetype")
+ if vim.api.nvim_buf_is_loaded(buffer) and file_type ~= "ivy" and #buffer_name > 0 then
+ local score = libivy.ivy_match(input, buffer_name)
+ if score > -200 or #input == 0 then
+ table.insert(list, { score = score, content = buffer_name })
+ end
+ end
+ end
+
+ table.sort(list, function(a, b)
+ return a.score < b.score
+ end)
+
+ return list
+end
+
+local buffers = {
+ name = "Buffers",
+ command = "IvyBuffers",
+ description = "List all of the current open buffers",
+ keymap = "<leader>b",
+ items = items,
+ callback = utils.file_action(),
+}
+
+return buffers
diff --git a/lua/ivy/backends/files.lua b/lua/ivy/backends/files.lua
new file mode 100644
index 0000000..bc98025
--- /dev/null
+++ b/lua/ivy/backends/files.lua
@@ -0,0 +1,17 @@
+local libivy = require "ivy.libivy"
+local utils = require "ivy.utils"
+
+local function items(term)
+ return libivy.ivy_files(term, vim.fn.getcwd())
+end
+
+local files = {
+ name = "Files",
+ command = "IvyFd",
+ description = "Find files in the project",
+ keymap = "<leader>p",
+ items = items,
+ callback = utils.file_action(),
+}
+
+return files
diff --git a/lua/ivy/backends/lines.lua b/lua/ivy/backends/lines.lua
new file mode 100644
index 0000000..3132f68
--- /dev/null
+++ b/lua/ivy/backends/lines.lua
@@ -0,0 +1,32 @@
+local utils = require "ivy.utils"
+local libivy = require "ivy.libivy"
+
+local function items(input)
+ local list = {}
+
+ local lines = vim.api.nvim_buf_get_lines(vim.ivy.origin(), 0, -1, false)
+ for index = 1, #lines do
+ local line = lines[index]
+ local score = libivy.ivy_match(input, line)
+ if score > -200 then
+ local prefix = string.rep(" ", 4 - #tostring(index)) .. index .. ": "
+ table.insert(list, { score = score, content = prefix .. line })
+ end
+ end
+
+ table.sort(list, function(a, b)
+ return a.score < b.score
+ end)
+
+ return list
+end
+
+local lines = {
+ name = "Lines",
+ command = "IvyLines",
+ description = "Search though the lines in the current buffer",
+ items = items,
+ callback = utils.line_action(),
+}
+
+return lines
diff --git a/plugin/ivy.lua b/plugin/ivy.lua
index 671d289..3bf9a67 100644
--- a/plugin/ivy.lua
+++ b/plugin/ivy.lua
@@ -1,73 +1,33 @@
local controller = require "ivy.controller"
-local utils = require "ivy.utils"
-local libivy = require "ivy.libivy"
-- Put the controller in to the vim global so we can access it in mappings
-- better without requires. You can call controller commands like `vim.ivy.xxx`.
-- luacheck: ignore
vim.ivy = controller
-vim.api.nvim_create_user_command("IvyAg", function()
- vim.ivy.run("AG", utils.command_finder "ag", utils.vimgrep_action())
-end, { bang = true, desc = "Run ag to search for content in files" })
-
-vim.api.nvim_create_user_command("IvyFd", function()
- vim.ivy.run("Files", function(term)
- return libivy.ivy_files(term, vim.fn.getcwd())
- end, utils.file_action())
-end, { bang = true, desc = "Find files in the project" })
-
-vim.api.nvim_create_user_command("IvyBuffers", function()
- vim.ivy.run("Buffers", function(input)
- local list = {}
- local buffers = vim.api.nvim_list_bufs()
- for index = 1, #buffers do
- local buffer = buffers[index]
- -- Get the relative path from the current working directory. We need to
- -- substring +2 to remove the `/` from the start of the path to give us a
- -- true relative path
- local buffer_name = vim.api.nvim_buf_get_name(buffer):sub(#vim.fn.getcwd() + 2, -1)
- local file_type = vim.api.nvim_buf_get_option(buffer, "filetype")
- if vim.api.nvim_buf_is_loaded(buffer) and file_type ~= "ivy" and #buffer_name > 0 then
- local score = libivy.ivy_match(input, buffer_name)
- if score > -200 or #input == 0 then
- table.insert(list, { score = score, content = buffer_name })
- end
- end
- end
-
- table.sort(list, function(a, b)
- return a.score < b.score
- end)
-
- return list
- end, utils.file_action())
-end, { bang = true, desc = "List all of the current open buffers" })
-
-vim.api.nvim_create_user_command("IvyLines", function()
- vim.ivy.run("Lines", function(input)
- local list = {}
-
- local lines = vim.api.nvim_buf_get_lines(vim.ivy.origin(), 0, -1, false)
- for index = 1, #lines do
- local line = lines[index]
- local score = libivy.ivy_match(input, line)
- if score > -200 then
- local prefix = string.rep(" ", 4 - #tostring(index)) .. index .. ": "
- table.insert(list, { score = score, content = prefix .. line })
- end
- end
-
- table.sort(list, function(a, b)
- return a.score < b.score
- end)
-
- return list
- end, utils.line_action())
-end, { bang = true, desc = "List all of the current open buffers" })
-
-vim.api.nvim_set_keymap("n", "<leader>b", "<cmd>IvyBuffers<CR>", { nowait = true, silent = true })
-vim.api.nvim_set_keymap("n", "<leader>p", "<cmd>IvyFd<CR>", { nowait = true, silent = true })
-vim.api.nvim_set_keymap("n", "<leader>/", "<cmd>IvyAg<CR>", { nowait = true, silent = true })
+local register_backend = function(backend)
+ assert(backend.command, "The backend must have a command")
+ assert(backend.items, "The backend must have a items function")
+ assert(backend.callback, "The backend must have a callback function")
+
+ local user_command_options = { bang = true }
+ if backend.description ~= nil then
+ user_command_options.desc = backend.description
+ end
+
+ local name = backend.name or backend.command
+ vim.api.nvim_create_user_command(backend.command, function()
+ vim.ivy.run(name, backend.items, backend.callback)
+ end, user_command_options)
+
+ if backend.keymap ~= nil then
+ vim.api.nvim_set_keymap("n", backend.keymap, "<cmd>" .. backend.command .. "<CR>", { nowait = true, silent = true })
+ end
+end
+
+register_backend(require "ivy.backends.ag")
+register_backend(require "ivy.backends.buffers")
+register_backend(require "ivy.backends.files")
+register_backend(require "ivy.backends.lines")
vim.cmd "highlight IvyMatch cterm=bold gui=bold"
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Dec 16, 7:55 PM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
8951
Default Alt Text
(7 KB)
Attached To
Mode
R1 ivy.nvim
Attached
Detach File
Event Timeline
Log In to Comment