66 lines
2.4 KiB
Lua
66 lines
2.4 KiB
Lua
local telescope = require('telescope')
|
|
local pickers = require('telescope.pickers')
|
|
local finders = require('telescope.finders')
|
|
local sorters = require('telescope.sorters')
|
|
local previewers = require('telescope.previewers')
|
|
local previewer_utils = require('telescope.previewers.utils')
|
|
local actions = require('telescope.actions')
|
|
local action_state = require('telescope.actions.state')
|
|
local Job = require('plenary.job')
|
|
|
|
local function script_path()
|
|
local str = debug.getinfo(2, "S").source:sub(2)
|
|
return str:match("(.*/)")
|
|
end
|
|
|
|
local function upper_first(word)
|
|
return word:gsub("(%a)([%w_']*)", function(first, rest) return first:upper()..rest:lower() end)
|
|
end
|
|
|
|
return telescope.register_extension {
|
|
exports = {
|
|
synonyms = function(opts)
|
|
opts = opts or {}
|
|
local cursor_word = vim.fn.expand("<cword>")
|
|
Job:new({
|
|
command = 'perl',
|
|
args = { script_path().."/cmd.pl", "synonyms", cursor_word },
|
|
on_exit = vim.schedule_wrap(function(job)
|
|
local synonyms = job:result() or {}
|
|
table.insert(synonyms, cursor_word:lower())
|
|
pickers.new(opts, {
|
|
prompt_title = upper_first(cursor_word).." Synonyms",
|
|
finder = finders.new_table {
|
|
results = synonyms,
|
|
},
|
|
sorter = sorters.get_substr_matcher(),
|
|
previewer = previewers.new_buffer_previewer({
|
|
define_preview = function(self, entry, _)
|
|
vim.api.nvim_win_set_option(self.state.winid, 'wrap', true)
|
|
vim.api.nvim_win_set_option(self.state.winid, 'lbr', true)
|
|
local cmd = { "perl", script_path().."/cmd.pl", "definitions", entry.value }
|
|
return previewer_utils.job_maker(cmd, self.state.bufnr, {
|
|
callback = function(bufnr, _)
|
|
previewer_utils.highlighter(bufnr, 'yaml')
|
|
end
|
|
})
|
|
end,
|
|
title = "Definition"
|
|
}),
|
|
dynamic_preview_title = true,
|
|
attach_mappings = function(prompt_bufnr)
|
|
actions.select_default:replace(function()
|
|
local selection = action_state.get_selected_entry()
|
|
actions.close(prompt_bufnr)
|
|
vim.cmd("normal! ciw" .. selection[1])
|
|
vim.cmd "stopinsert"
|
|
end)
|
|
return true
|
|
end,
|
|
}):find()
|
|
end)
|
|
}):start()
|
|
end
|
|
}
|
|
}
|