add small arrows before folders (#427)

This commit is contained in:
Kiyan 2021-06-02 18:45:25 +02:00 committed by GitHub
parent 45c331230c
commit d51ed722ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 4 deletions

View File

@ -56,10 +56,13 @@ let g:nvim_tree_show_icons = {
\ 'git': 1, \ 'git': 1,
\ 'folders': 0, \ 'folders': 0,
\ 'files': 0, \ 'files': 0,
\ 'folder_arrows': 0,
\ } \ }
"If 0, do not show the icons for one of 'git' 'folder' and 'files' "If 0, do not show the icons for one of 'git' 'folder' and 'files'
"1 by default, notice that if 'files' is 1, it will only display "1 by default, notice that if 'files' is 1, it will only display
"if nvim-web-devicons is installed and on your runtimepath "if nvim-web-devicons is installed and on your runtimepath.
"if folder is 1, you can also tell folder_arrows 1 to show small arrows next to the folder icons.
"but this will not work when you set indent_markers (because of UI conflict)
" default will show icon by default if no icon is provided " default will show icon by default if no icon is provided
" default shows no icon by default " default shows no icon by default
@ -76,6 +79,8 @@ let g:nvim_tree_icons = {
\ 'ignored': "◌" \ 'ignored': "◌"
\ }, \ },
\ 'folder': { \ 'folder': {
\ 'arrow_open': "",
\ 'arrow_closed': "",
\ 'default': "", \ 'default': "",
\ 'open': "", \ 'open': "",
\ 'empty': "", \ 'empty': "",

View File

@ -87,13 +87,17 @@ can disable icons per type:
let g:nvim_tree_show_icons = { let g:nvim_tree_show_icons = {
\ 'git': 1, \ 'git': 1,
\ 'folders': 1, \ 'folders': 1,
\ 'files': 1 \ 'files': 1,
\ 'folder_arrows': 1,
\} \}
Can be one of `1` and `0` for each key. By default the tree will try Can be one of `1` and `0` for each key. By default the tree will try
to render the icons. The `files` key can only work if `nvim-web-devicons` to render the icons. The `files` key can only work if `nvim-web-devicons`
is installed and in your |runtimepath| is installed and in your |runtimepath|
(https://github.com/kyazdani42/nvim-web-devicons) (https://github.com/kyazdani42/nvim-web-devicons)
if folder is 1, you can also set `folder_arrows = 1` to show small arrows
next to the folder icons but this will not work when you set
|g:nvim_tree_indent_markers| (because of UI conflict).
|g:nvim_tree_highlight_opened_files| *g:nvim_tree_highlight_opened_files* |g:nvim_tree_highlight_opened_files| *g:nvim_tree_highlight_opened_files*
@ -127,6 +131,8 @@ You can set icons for:
\ 'deleted': "", \ 'deleted': "",
\ }, \ },
\ 'folder': { \ 'folder': {
\ 'arrow_open': "",
\ 'arrow_closed': "",
\ 'default': "", \ 'default': "",
\ 'open': "", \ 'open': "",
\ 'empty': "", \ 'empty': "",

View File

@ -1,7 +1,7 @@
local M = {} local M = {}
function M.get_icon_state() function M.get_icon_state()
local show_icons = vim.g.nvim_tree_show_icons or { git = 1, folders = 1, files = 1 } local show_icons = vim.g.nvim_tree_show_icons or { git = 1, folders = 1, files = 1, folder_arrows = 1 }
local icons = { local icons = {
default = "", default = "",
symlink = "", symlink = "",
@ -15,6 +15,8 @@ function M.get_icon_state()
ignored = "" ignored = ""
}, },
folder_icons = { folder_icons = {
arrow_closed = "",
arrow_open = "",
default = "", default = "",
open = "", open = "",
empty = "", empty = "",
@ -60,6 +62,7 @@ function M.get_icon_state()
show_file_icon = show_icons.files == 1 and vim.g.nvim_web_devicons == 1, show_file_icon = show_icons.files == 1 and vim.g.nvim_web_devicons == 1,
show_folder_icon = show_icons.folders == 1, show_folder_icon = show_icons.folders == 1,
show_git_icon = show_icons.git == 1, show_git_icon = show_icons.git == 1,
show_folder_arrows = show_icons.folder_arrows == 1,
icons = icons icons = icons
} }
end end

View File

@ -215,6 +215,16 @@ local get_padding = function(depth)
return string.rep(' ', depth) return string.rep(' ', depth)
end end
if icon_state.show_folder_icon and icon_state.show_folder_arrows then
get_padding = function(depth, _, _, node)
if node.entries then
local icon = icon_state.icons.folder_icons[node.open and 'arrow_open' or 'arrow_closed']
return string.rep(' ', depth - 2)..icon..' '
end
return string.rep(' ', depth)
end
end
if vim.g.nvim_tree_indent_markers == 1 then if vim.g.nvim_tree_indent_markers == 1 then
get_padding = function(depth, idx, tree, _, markers) get_padding = function(depth, idx, tree, _, markers)
local padding = "" local padding = ""
@ -354,7 +364,9 @@ function M.draw(tree, reload)
index = 0 index = 0
lines = {} lines = {}
hl = {} hl = {}
update_draw_data(tree, 0, {})
local show_arrows = icon_state.show_folder_icon and icon_state.show_folder_arrows
update_draw_data(tree, show_arrows and 1 or 0, {})
end end
api.nvim_buf_set_option(view.View.bufnr, 'modifiable', true) api.nvim_buf_set_option(view.View.bufnr, 'modifiable', true)