From a8e780708698a431621a3556a802ca44031d64fd Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Sat, 24 Oct 2020 22:55:45 -0400 Subject: [PATCH] feat: Use colors from nvim-devicons --- lua/telescope/make_entry.lua | 25 ++++++++++++++++++------- lua/telescope/pickers.lua | 17 ++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua index e765904..46fd3c2 100644 --- a/lua/telescope/make_entry.lua +++ b/lua/telescope/make_entry.lua @@ -14,9 +14,10 @@ if has_devicons then return display end - local icon_display = (devicons.get_icon(filename, string.match(filename, '%a+$')) or ' ') .. ' ' .. display + local icon, icon_highlight = devicons.get_icon(filename, string.match(filename, '%a+$'), { default = true }) + local icon_display = (icon or ' ') .. ' ' .. display - return icon_display + return icon_display, icon_highlight end else transform_devicons = function(_, display, _) @@ -66,12 +67,18 @@ do mt_file_entry.cwd = cwd mt_file_entry.display = function(entry) - local display = entry.value + local display, hl_group = entry.value, nil if shorten_path then display = utils.path_shorten(display) end - return transform_devicons(entry.value, display, disable_devicons) + display, hl_group = transform_devicons(entry.value, display, disable_devicons) + + if hl_group then + return display, { { {1, 3}, hl_group } } + else + return display + end end mt_file_entry.__index = function(t, k) @@ -151,7 +158,7 @@ do mt_vimgrep_entry.cwd = vim.fn.expand(opts.cwd or vim.fn.getcwd()) mt_vimgrep_entry.display = function(entry) - local display = entry.value + local display, hl_group = entry.value, nil local display_filename if shorten_path then @@ -165,13 +172,17 @@ do coordinates = string.format("%s:%s:", entry.lnum, entry.col) end - display = transform_devicons( + display, hl_group = transform_devicons( entry.filename, string.format(display_string, display_filename, coordinates, entry.text), disable_devicons ) - return display + if hl_group then + return display, { { {1, 3}, hl_group } } + else + return display + end end mt_vimgrep_entry.__index = function(t, k) diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index 30780d1..935f6cf 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -37,6 +37,7 @@ local extend = function(opts, defaults) end local ns_telescope_selection = a.nvim_create_namespace('telescope_selection') +local ns_telescope_entry = a.nvim_create_namespace('telescope_entry') local ns_telescope_matching = a.nvim_create_namespace('telescope_matching') local ns_telescope_prompt = a.nvim_create_namespace('telescope_prompt') local ns_telescope_prompt_prefix = a.nvim_create_namespace('telescope_prompt_prefix') @@ -772,10 +773,10 @@ function Picker:entry_adder(index, entry, score) return end - local display + local display, display_highlights if type(entry.display) == 'function' then self:_increment("display_fn") - display = entry:display() + display, display_highlights = entry:display() elseif type(entry.display) == 'string' then display = entry.display else @@ -786,11 +787,8 @@ function Picker:entry_adder(index, entry, score) -- This is the two spaces to manage the '> ' stuff. -- Maybe someday we can use extmarks or floaty text or something to draw this and not insert here. -- until then, insert two spaces - if TELESCOPE_DEBUG then - display = ' ' .. score .. display - else - display = ' ' .. display - end + local prefix = TELESCOPE_DEBUG and (' ' .. score) or ' ' + display = prefix .. display self:_increment("displayed") @@ -803,6 +801,11 @@ function Picker:entry_adder(index, entry, score) local set_ok = pcall(vim.api.nvim_buf_set_lines, self.results_bufnr, row, row + 1, false, {display}) + if set_ok and display_highlights then + for _, hl_block in ipairs(display_highlights) do + a.nvim_buf_add_highlight(self.results_bufnr, ns_telescope_entry, hl_block[2], row, #prefix + hl_block[1][1], #prefix + hl_block[1][2]) + end + end -- This pretty much only fails when people leave newlines in their results. -- So we'll clean it up for them if it fails.