using plenary to fetch synonyms instead of systemlist

This commit is contained in:
Rudis Muiznieks 2021-09-04 18:57:25 -05:00
parent 9dcd475716
commit 0d886acb1d
2 changed files with 44 additions and 40 deletions

View File

@ -2,6 +2,8 @@
A [Telescope](https://github.com/nvim-telescope/telescope.nvim) extension that loads a list of synonyms for the word under the cusor in the current buffer, and shows their definition in the preview window. Selecting one of the synonyms replaces the word in the buffer.
![Screenshot](https://raw.githubusercontent.com/wiki/rudism/telescope-dict.nvim/img/screen_shot.png)
## Requirements
These should be available through your package manager (or likely already installed, in the case of `perl`):

View File

@ -1,3 +1,4 @@
-- command
local telescope = require('telescope')
local pickers = require('telescope.pickers')
local finders = require('telescope.finders')
@ -6,13 +7,14 @@ 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')
function script_path()
local function script_path()
local str = debug.getinfo(2, "S").source:sub(2)
return str:match("(.*/)")
end
function upper_first(word)
local function upper_first(word)
return word:gsub("(%a)([%w_']*)", function(first, rest) return first:upper()..rest:lower() end)
end
@ -21,44 +23,44 @@ return telescope.register_extension {
synonyms = function(opts)
opts = opts or {}
local cursor_word = vim.fn.expand("<cword>")
local command = table.concat({
"perl ",
script_path().."/cmd.pl ",
"synonyms ",
vim.fn.shellescape(cursor_word)
})
local synonyms = vim.fn.systemlist(command) 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, status)
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, content)
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()
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
}
}