aboutsummaryrefslogtreecommitdiffstats
path: root/lua/alpha/select_to_quickfix.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/alpha/select_to_quickfix.lua')
-rw-r--r--lua/alpha/select_to_quickfix.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/lua/alpha/select_to_quickfix.lua b/lua/alpha/select_to_quickfix.lua
new file mode 100644
index 0000000..ebd1561
--- /dev/null
+++ b/lua/alpha/select_to_quickfix.lua
@@ -0,0 +1,53 @@
+local api = vim.api
+
+local function create_quickfix_entry(selection)
+ local filename, linenumber = selection:match "([^:]+):(%d+)"
+
+ return {
+ filename = vim.fn.getcwd() .. "/" .. filename,
+ lnum = tonumber(linenumber),
+ col = 1,
+ text = filename,
+ }
+end
+
+local function add_selections_to_quickfix(selections)
+ local quickfix_list = {}
+
+ for _, selection in ipairs(selections) do
+ local entry = create_quickfix_entry(selection)
+ table.insert(quickfix_list, entry)
+ end
+
+ vim.fn.setqflist(quickfix_list, "r")
+end
+
+local function get_selections()
+ local _, end_line, _, _ = unpack(vim.fn.getpos "'>")
+ local _, start_line, _, _ = unpack(vim.fn.getpos "'<")
+ local lines = api.nvim_buf_get_lines(0, start_line - 1, end_line, false)
+
+ local selections = {}
+ for _, line in ipairs(lines) do
+ for selection in line:gmatch "%S+" do
+ table.insert(selections, selection)
+ end
+ end
+
+ return selections
+end
+
+local function select_to_quickfix()
+ local selections = get_selections()
+
+ if #selections > 0 then
+ add_selections_to_quickfix(selections)
+ print "Selections added to quickfix list"
+ else
+ print "No selections found"
+ end
+end
+
+return {
+ handle = select_to_quickfix,
+}