Skip to content

Commit a8873b8

Browse files
committed
Merge remote-tracking branch 'nvim-tree/master' into feat/icon_placement-right_align
2 parents 6b7b4f2 + 4e396b2 commit a8873b8

17 files changed

+256
-68
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
/luals-out/
22
/luals/
3+
# backup vim files
4+
*~

doc/nvim-tree-lua.txt

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ Following is the default configuration. See |nvim-tree-opts| for details.
428428
highlight_diagnostics = "none",
429429
highlight_opened_files = "none",
430430
highlight_modified = "none",
431+
highlight_hidden = "none",
431432
highlight_bookmarks = "none",
432433
highlight_clipboard = "name",
433434
indent_markers = {
@@ -454,6 +455,7 @@ Following is the default configuration. See |nvim-tree-opts| for details.
454455
},
455456
git_placement = "before",
456457
modified_placement = "after",
458+
hidden_placement = "after",
457459
diagnostics_placement = "signcolumn",
458460
bookmarks_placement = "signcolumn",
459461
padding = " ",
@@ -464,6 +466,7 @@ Following is the default configuration. See |nvim-tree-opts| for details.
464466
folder_arrow = true,
465467
git = true,
466468
modified = true,
469+
hidden = false,
467470
diagnostics = true,
468471
bookmarks = true,
469472
},
@@ -472,6 +475,7 @@ Following is the default configuration. See |nvim-tree-opts| for details.
472475
symlink = "",
473476
bookmark = "󰆤",
474477
modified = "●",
478+
hidden = "󰜌",
475479
folder = {
476480
arrow_closed = "",
477481
arrow_open = "",
@@ -904,6 +908,13 @@ Requires |nvim-tree.modified.enable|
904908
Value can be `"none"`, `"icon"`, `"name"` or `"all"`
905909
Type: `string`, Default `"none"`
906910

911+
*nvim-tree.renderer.highlight_hidden*
912+
Highlight icons and/or names for hidden files (dotfiles) using the
913+
`NvimTreeHiddenFileHL` highlight group.
914+
Requires |nvim-tree.hidden.enable|
915+
Value can be `"none"`, `"icon"`, `"name"` or `"all"`
916+
Type: `string`, Default `"none"`
917+
907918
*nvim-tree.renderer.highlight_bookmarks*
908919
Highlight bookmarked using the `NvimTreeBookmarkHL` group.
909920
Value can be `"none"`, `"icon"`, `"name"` or `"all"`
@@ -942,7 +953,7 @@ Configuration options for tree indent markers.
942953
Configuration options for icons.
943954

944955
Icon order and sign column precedence:
945-
git < modified < bookmarked < diagnostics
956+
git < hidden < modified < bookmarked < diagnostics
946957

947958
`renderer.icons.*_placement` options may be:
948959
- `"before"` : before file/folder, after the file/folders icons
@@ -989,6 +1000,12 @@ Icon order and sign column precedence:
9891000
Modified icon placement.
9901001
Type: `string`, Default: `"after"`
9911002

1003+
*nvim-tree.renderer.icons.hidden_placement*
1004+
Place where the hidden (dotfile) icon will be rendered.
1005+
Can be `"after"` or `"before"` filename (after the file/folders icons)
1006+
or `"signcolumn"` (requires |nvim-tree.view.signcolumn| enabled).
1007+
Type: `string`, Default: `"after"`
1008+
9921009
*nvim-tree.renderer.icons.bookmarks_placement*
9931010
Bookmark icon placement.
9941011
Type: `string`, Default: `signcolumn`
@@ -1003,7 +1020,7 @@ Icon order and sign column precedence:
10031020

10041021
*nvim-tree.renderer.icons.show*
10051022
Configuration options for showing icon types.
1006-
Left to right order: file/folder, git, modified, diagnostics, bookmarked.
1023+
Left to right order: file/folder, git, modified, hidden, diagnostics, bookmarked.
10071024

10081025
*nvim-tree.renderer.icons.show.file*
10091026
Show an icon before the file name.
@@ -1028,6 +1045,11 @@ Icon order and sign column precedence:
10281045
Requires |modified.enable| `= true`
10291046
Type: `boolean`, Default: `true`
10301047

1048+
*nvim-tree.renderer.icons.show.hidden*
1049+
Show a hidden icon, see |renderer.icons.hidden_placement|
1050+
Requires |hidden.enable| `= true`
1051+
Type: `boolean`, Default: `true`
1052+
10311053
*nvim-tree.renderer.icons.show.diagnostics*
10321054
Show a diagnostics status icon, see |renderer.icons.diagnostics_placement|
10331055
Requires |diagnostics.enable| `= true`
@@ -1055,6 +1077,10 @@ Icon order and sign column precedence:
10551077
Icon to display for modified files.
10561078
Type: `string`, Default: `""`
10571079

1080+
*nvim-tree.renderer.icons.glyphs.hidden*
1081+
Icon to display for hidden files.
1082+
Type: `string`, Default: `"󰜌""`
1083+
10581084
*nvim-tree.renderer.icons.glyphs.folder*
10591085
Glyphs for directories.
10601086
Overridden by |nvim-tree.renderer.icons.web_devicons| if available.
@@ -2431,6 +2457,11 @@ Modified: >
24312457
NvimTreeModifiedIcon Type
24322458
NvimTreeModifiedFileHL NvimTreeModifiedIcon
24332459
NvimTreeModifiedFolderHL NvimTreeModifiedIcon
2460+
2461+
Hidden: >
2462+
NvimTreeModifiedIcon Conceal
2463+
NvimTreeModifiedFileHL NvimTreeHiddenIcon
2464+
NvimTreeModifiedFolderHL NvimTreeHiddenFileHL
24342465
<
24352466
Opened: >
24362467
NvimTreeOpenedHL Special
@@ -2851,6 +2882,7 @@ highlight group is not, hard linking as follows: >
28512882
|nvim-tree.renderer.highlight_clipboard|
28522883
|nvim-tree.renderer.highlight_diagnostics|
28532884
|nvim-tree.renderer.highlight_git|
2885+
|nvim-tree.renderer.highlight_hidden|
28542886
|nvim-tree.renderer.highlight_modified|
28552887
|nvim-tree.renderer.highlight_opened_files|
28562888
|nvim-tree.renderer.icons|
@@ -2861,8 +2893,10 @@ highlight group is not, hard linking as follows: >
28612893
|nvim-tree.renderer.icons.glyphs.default|
28622894
|nvim-tree.renderer.icons.glyphs.folder|
28632895
|nvim-tree.renderer.icons.glyphs.git|
2896+
|nvim-tree.renderer.icons.glyphs.hidden|
28642897
|nvim-tree.renderer.icons.glyphs.modified|
28652898
|nvim-tree.renderer.icons.glyphs.symlink|
2899+
|nvim-tree.renderer.icons.hidden_placement|
28662900
|nvim-tree.renderer.icons.modified_placement|
28672901
|nvim-tree.renderer.icons.padding|
28682902
|nvim-tree.renderer.icons.show|
@@ -2872,6 +2906,7 @@ highlight group is not, hard linking as follows: >
28722906
|nvim-tree.renderer.icons.show.folder|
28732907
|nvim-tree.renderer.icons.show.folder_arrow|
28742908
|nvim-tree.renderer.icons.show.git|
2909+
|nvim-tree.renderer.icons.show.hidden|
28752910
|nvim-tree.renderer.icons.show.modified|
28762911
|nvim-tree.renderer.icons.symlink_arrow|
28772912
|nvim-tree.renderer.icons.web_devicons|

lua/nvim-tree.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
392392
highlight_diagnostics = "none",
393393
highlight_opened_files = "none",
394394
highlight_modified = "none",
395+
highlight_hidden = "none",
395396
highlight_bookmarks = "none",
396397
highlight_clipboard = "name",
397398
indent_markers = {
@@ -418,6 +419,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
418419
},
419420
git_placement = "before",
420421
modified_placement = "after",
422+
hidden_placement = "after",
421423
diagnostics_placement = "signcolumn",
422424
bookmarks_placement = "signcolumn",
423425
padding = " ",
@@ -428,6 +430,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
428430
folder_arrow = true,
429431
git = true,
430432
modified = true,
433+
hidden = false,
431434
diagnostics = true,
432435
bookmarks = true,
433436
},
@@ -436,6 +439,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
436439
symlink = "",
437440
bookmark = "󰆤",
438441
modified = "",
442+
hidden = "󰜌",
439443
folder = {
440444
arrow_closed = "",
441445
arrow_open = "",
@@ -668,12 +672,14 @@ local ACCEPTED_STRINGS = {
668672
highlight_git = { "none", "icon", "name", "all" },
669673
highlight_opened_files = { "none", "icon", "name", "all" },
670674
highlight_modified = { "none", "icon", "name", "all" },
675+
highlight_hidden = { "none", "icon", "name", "all" },
671676
highlight_bookmarks = { "none", "icon", "name", "all" },
672677
highlight_diagnostics = { "none", "icon", "name", "all" },
673678
highlight_clipboard = { "none", "icon", "name", "all" },
674679
icons = {
675680
git_placement = { "before", "after", "signcolumn", "right_align" },
676681
modified_placement = { "before", "after", "signcolumn", "right_align" },
682+
hidden_placement = { "before", "after", "signcolumn", "right_align" },
677683
diagnostics_placement = { "before", "after", "signcolumn", "right_align" },
678684
bookmarks_placement = { "before", "after", "signcolumn", "right_align" },
679685
},

lua/nvim-tree/api.lua

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
local lib = require "nvim-tree.lib"
2+
local core = require "nvim-tree.core"
23
local view = require "nvim-tree.view"
34
local utils = require "nvim-tree.utils"
45
local actions = require "nvim-tree.actions"
56
local appearance_diagnostics = require "nvim-tree.appearance.diagnostics"
67
local events = require "nvim-tree.events"
78
local help = require "nvim-tree.help"
89
local live_filter = require "nvim-tree.live-filter"
9-
local marks = require "nvim-tree.marks"
1010
local marks_navigation = require "nvim-tree.marks.navigation"
1111
local marks_bulk_delete = require "nvim-tree.marks.bulk-delete"
1212
local marks_bulk_trash = require "nvim-tree.marks.bulk-trash"
@@ -43,9 +43,10 @@ local Api = {
4343
diagnostics = {},
4444
}
4545

46-
--- Do nothing when setup not called.
46+
--- Print error when setup not called.
4747
--- f function to invoke
4848
---@param f function
49+
---@return fun(...) : any
4950
local function wrap(f)
5051
return function(...)
5152
if vim.g.NvimTreeSetup == 1 then
@@ -56,13 +57,13 @@ local function wrap(f)
5657
end
5758
end
5859

59-
---Inject the node as the first argument if absent.
60+
---Inject the node as the first argument if present otherwise do nothing.
6061
---@param fn function function to invoke
6162
local function wrap_node(fn)
6263
return function(node, ...)
6364
node = node or lib.get_node_at_cursor()
6465
if node then
65-
fn(node, ...)
66+
return fn(node, ...)
6667
end
6768
end
6869
end
@@ -72,10 +73,36 @@ end
7273
local function wrap_node_or_nil(fn)
7374
return function(node, ...)
7475
node = node or lib.get_node_at_cursor()
75-
fn(node, ...)
76+
return fn(node, ...)
7677
end
7778
end
7879

80+
---Inject the explorer as the first argument if present otherwise do nothing.
81+
---@param fn function function to invoke
82+
---@return fun(...) : any
83+
local function wrap_explorer(fn)
84+
return function(...)
85+
local explorer = core.get_explorer()
86+
if explorer then
87+
return fn(explorer, ...)
88+
end
89+
end
90+
end
91+
92+
---Invoke a member's method on the singleton explorer.
93+
---Print error when setup not called.
94+
---@param explorer_member string explorer member name
95+
---@param member_method string method name to invoke on member
96+
---@return fun(...) : any
97+
local function wrap_explorer_member(explorer_member, member_method)
98+
return wrap(function(...)
99+
local explorer = core.get_explorer()
100+
if explorer then
101+
return explorer[explorer_member][member_method](explorer[explorer_member], ...)
102+
end
103+
end)
104+
end
105+
79106
---@class ApiTreeOpenOpts
80107
---@field path string|nil path
81108
---@field current_window boolean|nil default false
@@ -241,13 +268,13 @@ Api.events.Event = events.Event
241268
Api.live_filter.start = wrap(live_filter.start_filtering)
242269
Api.live_filter.clear = wrap(live_filter.clear_filter)
243270

244-
Api.marks.get = wrap_node(marks.get_mark)
245-
Api.marks.list = wrap(marks.get_marks)
246-
Api.marks.toggle = wrap_node(marks.toggle_mark)
247-
Api.marks.clear = wrap(marks.clear_marks)
248-
Api.marks.bulk.delete = wrap(marks_bulk_delete.bulk_delete)
249-
Api.marks.bulk.trash = wrap(marks_bulk_trash.bulk_trash)
250-
Api.marks.bulk.move = wrap(marks_bulk_move.bulk_move)
271+
Api.marks.get = wrap_node(wrap_explorer_member("marks", "get_mark"))
272+
Api.marks.list = wrap_explorer_member("marks", "get_marks")
273+
Api.marks.toggle = wrap_node(wrap_explorer_member("marks", "toggle_mark"))
274+
Api.marks.clear = wrap_explorer_member("marks", "clear_marks")
275+
Api.marks.bulk.delete = wrap_explorer(marks_bulk_delete.bulk_delete)
276+
Api.marks.bulk.trash = wrap_explorer(marks_bulk_trash.bulk_trash)
277+
Api.marks.bulk.move = wrap_explorer(marks_bulk_move.bulk_move)
251278
Api.marks.navigate.next = wrap(marks_navigation.next)
252279
Api.marks.navigate.prev = wrap(marks_navigation.prev)
253280
Api.marks.navigate.select = wrap(marks_navigation.select)

lua/nvim-tree/appearance/init.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ M.HIGHLIGHT_GROUPS = {
7676
{ group = "NvimTreeModifiedFileHL", link = "NvimTreeModifiedIcon" },
7777
{ group = "NvimTreeModifiedFolderHL", link = "NvimTreeModifiedFileHL" },
7878

79+
-- Hidden
80+
{ group = "NvimTreeHiddenIcon", link = "Conceal" },
81+
{ group = "NvimTreeHiddenFileHL", link = "NvimTreeHiddenIcon" },
82+
{ group = "NvimTreeHiddenFolderHL", link = "NvimTreeHiddenFileHL" },
83+
7984
-- Opened
8085
{ group = "NvimTreeOpenedHL", link = "Special" },
8186

lua/nvim-tree/explorer/filters.lua

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
local utils = require "nvim-tree.utils"
2-
local marks = require "nvim-tree.marks"
32

43
local M = {
54
ignore_list = {},
@@ -155,8 +154,11 @@ function M.prepare(git_status)
155154
status.bufinfo = vim.fn.getbufinfo { buflisted = 1 }
156155
end
157156

158-
for _, node in pairs(marks.get_marks()) do
159-
status.bookmarks[node.absolute_path] = node.type
157+
local explorer = require("nvim-tree.core").get_explorer()
158+
if explorer then
159+
for _, node in pairs(explorer.marks:get_marks()) do
160+
status.bookmarks[node.absolute_path] = node.type
161+
end
160162
end
161163

162164
return status

lua/nvim-tree/explorer/init.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ local git = require "nvim-tree.git"
22
local notify = require "nvim-tree.notify"
33
local watch = require "nvim-tree.explorer.watch"
44
local explorer_node = require "nvim-tree.explorer.node"
5+
local Marks = require "nvim-tree.marks"
56

67
local M = {}
78

@@ -12,6 +13,7 @@ M.reload = require("nvim-tree.explorer.reload").reload
1213
---@field absolute_path string
1314
---@field nodes Node[]
1415
---@field open boolean
16+
---@field marks Marks
1517

1618
local Explorer = {}
1719
Explorer.__index = Explorer
@@ -36,6 +38,7 @@ function Explorer.new(path)
3638
absolute_path = path,
3739
nodes = {},
3840
open = true,
41+
marks = Marks:new(),
3942
}, Explorer)
4043
explorer.watcher = watch.create_watcher(explorer)
4144
explorer:_load(explorer)

lua/nvim-tree/explorer/node.lua

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,19 @@ function M.is_git_ignored(node)
128128
return node and node.git_status ~= nil and node.git_status.file == "!!"
129129
end
130130

131+
---@param node Node
132+
---@return boolean
133+
function M.is_dotfile(node)
134+
if node == nil then
135+
return false
136+
end
137+
if node.is_dot or (node.name and (node.name:sub(1, 1) == ".")) or M.is_dotfile(node.parent) then
138+
node.is_dot = true
139+
return true
140+
end
141+
return false
142+
end
143+
131144
---@param node Node
132145
function M.node_destroy(node)
133146
if not node then

0 commit comments

Comments
 (0)