You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
72 lines
1.9 KiB
local pickers = require("telescope.pickers")
|
|
local finders = require("telescope.finders")
|
|
local sorters = require("telescope.sorters")
|
|
local config = require("telescope.config").values
|
|
local actions = require("telescope.actions")
|
|
local action_state = require("telescope.actions.state")
|
|
local http_client = require("telescope_meilisearch.http_client")
|
|
|
|
local function search_meilisearch(query)
|
|
local url = "http://127.0.0.1:7700/indexes/notes/search"
|
|
local payload = '{"q": "' .. query .. '"}'
|
|
local headers = {
|
|
"Content-Type: application/json",
|
|
"Content-Length: " .. #payload
|
|
}
|
|
|
|
local _, body = http_client.make_request(url, "POST", headers, payload)
|
|
local results = vim.fn.json_decode(body).hits
|
|
return results
|
|
end
|
|
|
|
local function meilisearch(opts)
|
|
local query = vim.fn.input("Meilisearch> ")
|
|
|
|
if query == "" then
|
|
return
|
|
end
|
|
|
|
local results = search_meilisearch(query)
|
|
|
|
if #results == 0 then
|
|
print("No results found")
|
|
return
|
|
end
|
|
|
|
pickers.new(opts, {
|
|
prompt_title = "Meilisearch",
|
|
finder = finders.new_table {
|
|
results = results,
|
|
entry_maker = function(entry)
|
|
return {
|
|
value = entry.title,
|
|
display = entry.title .. " - " .. entry.path,
|
|
ordinal = entry.title,
|
|
path = entry.path,
|
|
line_number = entry.line_number,
|
|
column_number = entry.column_number,
|
|
}
|
|
end,
|
|
},
|
|
sorter = config.generic_sorter(opts),
|
|
attach_mappings = function(_, map)
|
|
map("i", "<CR>", function(prompt_bufnr)
|
|
local selection = action_state.get_selected_entry()
|
|
actions.close(prompt_bufnr)
|
|
|
|
if selection then
|
|
vim.cmd("e " .. selection.path)
|
|
vim.cmd(selection.line_number .. "G")
|
|
vim.cmd("normal! " .. selection.column_number .. "|")
|
|
end
|
|
end)
|
|
|
|
return true
|
|
end,
|
|
}):find()
|
|
end
|
|
|
|
return {
|
|
meilisearch = meilisearch
|
|
}
|