diff options
| author | Simon Hauser <Simon-Hauser@outlook.de> | 2020-11-22 03:33:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-21 21:33:27 -0500 |
| commit | d153c006e76db4d56eeb03605698a23344cfadbd (patch) | |
| tree | 5733881aad9b86dcb2b961b8ff7d8ac5c36f4413 /lua | |
| parent | 5bf53823eb7bff7031368dbfa659f0b9775b89e7 (diff) | |
feat: Add highlights builtin (#267)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/telescope/builtin/init.lua | 24 | ||||
| -rw-r--r-- | lua/telescope/make_entry.lua | 28 | ||||
| -rw-r--r-- | lua/telescope/previewers.lua | 24 |
3 files changed, 75 insertions, 1 deletions
diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua index 8bb082f..faef9d6 100644 --- a/lua/telescope/builtin/init.lua +++ b/lua/telescope/builtin/init.lua @@ -910,6 +910,30 @@ builtin.filetypes = function(opts) }):find() end +builtin.highlights = function(opts) + opts = opts or {} + + local highlights = vim.fn.getcompletion('', 'highlight') + + pickers.new({}, { + prompt_title = 'Highlights', + finder = finders.new_table { + results = highlights, + entry_maker = make_entry.gen_from_highlights(opts) + }, + sorter = conf.generic_sorter(), + attach_mappings = function(prompt_bufnr) + actions.goto_file_selection_edit:replace(function() + local selection = actions.get_selected_entry() + actions.close(prompt_bufnr) + vim.cmd('hi ' .. selection.value) + end) + return true + end, + previewer = previewers.display_content.new(opts), + }):find() +end + builtin.tags = function(opts) opts = opts or {} diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua index 57344ab..e63fef2 100644 --- a/lua/telescope/make_entry.lua +++ b/lua/telescope/make_entry.lua @@ -453,7 +453,33 @@ function make_entry.gen_from_marks(_) end end -function make_entry.gen_from_vimoptions(opts) +function make_entry.gen_from_highlights() + return function(entry) + local make_display = function(entry) + local display = entry.value + return display, { { { 0, #display }, display } } + end + + local preview_command = function(entry, bufnr) + local hl = entry.value + vim.api.nvim_buf_set_option(bufnr, 'filetype', 'vim') + local output = vim.split(vim.fn.execute('hi ' .. hl), '\n') + local start = string.find(output[2], 'xxx', 1, true) + vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, output) + vim.api.nvim_buf_add_highlight(bufnr, -1, hl, 1, start - 1, start + 2) + end + + return { + value = entry, + display = make_display, + ordinal = entry, + + preview_command = preview_command + } + end +end + +function make_entry.gen_from_vimoptions() -- TODO: Can we just remove this from `options.lua`? function N_(s) return s diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua index 705b73d..9898079 100644 --- a/lua/telescope/previewers.lua +++ b/lua/telescope/previewers.lua @@ -680,6 +680,30 @@ previewers.man = defaulter(function(_) } end) +previewers.display_content = defaulter(function(_) + return previewers.new { + preview_fn = function(self, entry, status) + with_preview_window(status, nil, function() + local bufnr = vim.fn.bufadd("Preview command") + vim.api.nvim_win_set_buf(status.preview_win, bufnr) + vim.api.nvim_win_set_option(status.preview_win, 'wrap', true) + vim.api.nvim_win_set_option(status.preview_win, 'winhl', 'Normal:Normal') + vim.api.nvim_win_set_option(status.preview_win, 'signcolumn', 'no') + vim.api.nvim_win_set_option(status.preview_win, 'foldlevel', 100) + + if type(entry.preview_command) ~= 'function' then + print('entry must provide a preview_command function which will put the content into the buffer') + return + end + + entry.preview_command(entry, bufnr) + + self.state.hl_win = status.preview_win + end) + end + } +end, {}) + previewers.Previewer = Previewer return previewers |
