summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2020-11-22 03:33:27 +0100
committerGitHub <noreply@github.com>2020-11-21 21:33:27 -0500
commitd153c006e76db4d56eeb03605698a23344cfadbd (patch)
tree5733881aad9b86dcb2b961b8ff7d8ac5c36f4413 /lua
parent5bf53823eb7bff7031368dbfa659f0b9775b89e7 (diff)
feat: Add highlights builtin (#267)
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/builtin/init.lua24
-rw-r--r--lua/telescope/make_entry.lua28
-rw-r--r--lua/telescope/previewers.lua24
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