Skip to content

Commit cabcbd6

Browse files
committed
add basic telescope support
1 parent 8bc7b7e commit cabcbd6

File tree

4 files changed

+121
-0
lines changed

4 files changed

+121
-0
lines changed

lua/convert/telescope.lua

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
local pickers = require("telescope.pickers")
2+
local finders = require("telescope.finders")
3+
local conf = require("telescope.config").values
4+
local actions = require("telescope.actions")
5+
local action_state = require("telescope.actions.state")
6+
local previewers = require("telescope.previewers")
7+
8+
local M = {}
9+
10+
M.actions_picker = function()
11+
local actions_list = {
12+
{
13+
name = "Find current conversion",
14+
fn = require("convert").find_current,
15+
},
16+
{
17+
name = "Find next conversion",
18+
fn = require("convert").find_next,
19+
},
20+
{
21+
name = "Convert all",
22+
fn = require("convert").convert_all,
23+
},
24+
}
25+
26+
pickers.new({}, {
27+
prompt_title = "Convert",
28+
finder = finders.new_table({
29+
results = actions_list,
30+
entry_maker = function(entry)
31+
return {
32+
value = entry,
33+
display = entry.name,
34+
ordinal = entry.name,
35+
}
36+
end,
37+
}),
38+
sorter = conf.generic_sorter({}),
39+
attach_mappings = function(prompt_bufnr)
40+
actions.select_default:replace(function()
41+
actions.close(prompt_bufnr)
42+
local selection = action_state.get_selected_entry()
43+
selection.value.fn()
44+
end)
45+
return true
46+
end,
47+
}):find()
48+
end
49+
50+
return M
51+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
return require("telescope").register_extension({
2+
exports = {
3+
convert = require("convert.telescope").actions_picker
4+
}
5+
})
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
local previewers = require("telescope.previewers")
2+
3+
local M = {}
4+
5+
M.convert_previewer = previewers.new_buffer_previewer({
6+
title = "Convert Preview",
7+
8+
define_preview = function(self, entry)
9+
local buf = self.state.bufnr
10+
11+
vim.api.nvim_buf_set_lines(buf, 0, -1, false, {
12+
entry.line,
13+
})
14+
15+
vim.api.nvim_buf_set_option(buf, "filetype", vim.bo.filetype)
16+
17+
-- Lua strings are 1-indexed; Neovim cols are 0-indexed
18+
vim.api.nvim_buf_add_highlight(
19+
buf,
20+
-1,
21+
"IncSearch",
22+
0,
23+
entry.pos.start_col - 1,
24+
entry.pos.end_col
25+
)
26+
end,
27+
})
28+
29+
return M
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
local utils = require("convert.utils")
2+
3+
local M = {}
4+
5+
---@class matched
6+
---@field unit string
7+
---@field val number
8+
---@field pos matched_pos
9+
10+
---@class matched_entry : matched
11+
---@field bufnr integer
12+
---@field line string
13+
14+
M.collect_buffer_matches = function ()
15+
local bufnr = vim.api.nvim_get_current_buf()
16+
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
17+
18+
local results = {}
19+
20+
for row, line in ipairs(lines) do
21+
local matches = utils.find_all_units_in_line(line, row)
22+
if matches then
23+
for _, m in ipairs(matches) do
24+
-- enrich here
25+
m.bufnr = bufnr
26+
m.line = line
27+
28+
table.insert(results, m)
29+
end
30+
end
31+
end
32+
33+
return results
34+
end
35+
36+
return M

0 commit comments

Comments
 (0)