From 0d886acb1da271428a76c61e8ffb91a59c214f28 Mon Sep 17 00:00:00 2001 From: Rudis Muiznieks Date: Sat, 4 Sep 2021 18:57:25 -0500 Subject: [PATCH] using plenary to fetch synonyms instead of systemlist --- README.md | 2 + lua/telescope/_extensions/dict.lua | 82 +++++++++++++++--------------- 2 files changed, 44 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 9bd275e..234213c 100644 --- a/README.md +++ b/README.md @@ -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`): diff --git a/lua/telescope/_extensions/dict.lua b/lua/telescope/_extensions/dict.lua index b0e3903..db25494 100644 --- a/lua/telescope/_extensions/dict.lua +++ b/lua/telescope/_extensions/dict.lua @@ -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("") - 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 } }