From 5bd6f5ca9828ea02f2c54d616ad65c72a5cdd7fb Mon Sep 17 00:00:00 2001 From: Senghan Bright Date: Fri, 9 Apr 2021 19:33:10 +0200 Subject: [PATCH] feat: add icons to git_status finder (#401) * add icons to git_status finder * fix lint warning * fix incorrect removed icon * refactor, more states/icons * refactor, widen columns to allow for 3char width icons * attempted col width fix * fixup: small comments Co-authored-by: TJ DeVries --- lua/telescope/make_entry.lua | 47 +++++++++++++++++++++++++++--------- plugin/telescope.vim | 1 + scratch/old_perf_debug | 36 --------------------------- 3 files changed, 36 insertions(+), 48 deletions(-) delete mode 100644 scratch/old_perf_debug diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua index c714e7b..b9635bb 100644 --- a/lua/telescope/make_entry.lua +++ b/lua/telescope/make_entry.lua @@ -1019,28 +1019,51 @@ function make_entry.gen_from_autocommands(_) end end +local git_icon_defaults = { + added = "+", + changed = "~", + copied = ">", + deleted = "-", + renamed = "➡", + unmerged = "‡", + untracked = "?" +} + function make_entry.gen_from_git_status(opts) + opts = opts or {} + + local col_width = ((opts.git_icons and opts.git_icons.added) and opts.git_icons.added:len() + 2) or 2 local displayer = entry_display.create { - separator = " ", + separator = "", items = { - { width = 1 }, - { width = 1 }, + { width = col_width}, + { width = col_width}, { remaining = true }, } } + local icons = vim.tbl_extend("keep", opts.git_icons or {}, git_icon_defaults) + + local git_abbrev = { + ["A"] = {icon = icons.added, hl = "TelescopeResultsDiffAdd"}, + ["U"] = {icon = icons.unmerged, hl = "TelescopeResultsDiffAdd"}, + ["M"] = {icon = icons.changed, hl = "TelescopeResultsDiffChange"}, + ["C"] = {icon = icons.copied, hl = "TelescopeResultsDiffChange"}, + ["R"] = {icon = icons.renamed, hl = "TelescopeResultsDiffChange"}, + ["D"] = {icon = icons.deleted, hl = "TelescopeResultsDiffDelete"}, + ["?"] = {icon = icons.untracked, hl = "TelescopeResultsDiffUntracked"}, + } + local make_display = function(entry) - local modified = "TelescopeResultsDiffChange" - local staged = "TelescopeResultsDiffAdd" - - if entry.status == "??" then - modified = "TelescopeResultsDiffDelete" - staged = "TelescopeResultsDiffDelete" - end + local x = string.sub(entry.status, 1, 1) + local y = string.sub(entry.status, -1) + local status_x = git_abbrev[x] or {} + local status_y = git_abbrev[y] or {} + local empty_space = (" ") return displayer { - { string.sub(entry.status, 1, 1), staged }, - { string.sub(entry.status, -1), modified }, + { status_x.icon or empty_space, status_x.hl}, + { status_y.icon or empty_space, status_y.hl}, entry.value, } end diff --git a/plugin/telescope.vim b/plugin/telescope.vim index ee2f475..2eea7b1 100644 --- a/plugin/telescope.vim +++ b/plugin/telescope.vim @@ -69,6 +69,7 @@ highlight default link TelescopeResultsSpecialComment SpecialComment highlight default link TelescopeResultsDiffChange DiffChange highlight default link TelescopeResultsDiffAdd DiffAdd highlight default link TelescopeResultsDiffDelete DiffDelete +highlight default link TelescopeResultsDiffUntracked NonText " This is like "" in your terminal. " To use it, do `cmap (TelescopeFuzzyCommandSearch) diff --git a/scratch/old_perf_debug b/scratch/old_perf_debug deleted file mode 100644 index 3561a98..0000000 --- a/scratch/old_perf_debug +++ /dev/null @@ -1,36 +0,0 @@ - - --- Until I have better profiling stuff, this will have to do. -PERF = function(...) end -PERF_DEBUG = PERF_DEBUG or nil -START = nil - -if PERF_DEBUG then - PERF = function(...) - local new_time = (vim.loop.hrtime() - START) / 1E9 - if select('#', ...) == 0 then - vim.schedule(function() - vim.api.nvim_buf_set_lines(PERF_DEBUG, -1, -1, false, { '' }) - end) - return - end - - local to_insert = '' - if START then - to_insert = tostring(new_time) .. ' | ' - end - - for _, v in ipairs({...}) do - if type(v) == 'table' then - to_insert = to_insert .. tostring(#v) .. ' | ' - else - to_insert = to_insert .. tostring(v) .. ' | ' - end - end - - vim.schedule(function() - vim.api.nvim_buf_set_lines(PERF_DEBUG, -1, -1, false, { to_insert }) - end) - end -end -