Skip to content

Commit 6e89ca3

Browse files
authored
Merge branch 'master' into 2415-highlight-overhaul
2 parents 506f0bb + aaee4cd commit 6e89ca3

18 files changed

+264
-144
lines changed

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ body:
1313
* ensure that nvim-tree is updated to the latest version
1414
1515
If you are experiencing performance issues, please [enable profiling](https://github.com/nvim-tree/nvim-tree.lua#performance-issues) and attach the logs.
16+
17+
Please note that nvim-tree team members do not have access to nor expertise with Windows. You will need to be an active participant during resolution.
1618
- type: textarea
1719
attributes:
1820
label: "Description"
@@ -36,6 +38,12 @@ body:
3638
placeholder: "Linux 5.16.11-arch1-1, macOS 11.5, Windows 10"
3739
validations:
3840
required: true
41+
- type: input
42+
attributes:
43+
label: "Windows variant"
44+
placeholder: "WSL, PowerShell, cygwin, msys"
45+
validations:
46+
required: false
3947
- type: input
4048
attributes:
4149
label: "nvim-tree version"

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,9 @@ See [Showcases](https://github.com/nvim-tree/nvim-tree.lua/wiki/Showcases) wiki
157157

158158
Please add your own!
159159

160+
## Team
161+
162+
* [@alex-courtis](https://github.com/alex-courtis) Arch Linux
163+
* [@gegoune](https://github.com/gegoune) macOS
164+
* [@Akmadan23](https://github.com/Akmadan23) Linux
165+
* [@dependabot[bot]](https://github.com/apps/dependabot) Ubuntu Linux

doc/nvim-tree-lua.txt

Lines changed: 68 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ Show the mappings: `g?`
151151
`<BS>` Close Directory |nvim-tree-api.node.navigate.parent_close()|
152152
`<CR>` Open |nvim-tree-api.node.open.edit()|
153153
`<Tab>` Open Preview |nvim-tree-api.node.open.preview()|
154+
`<S-Tab>` Open Preview: No Picker |nvim-tree-api.node.open.preview_no_picker()|
154155
`>` Next Sibling |nvim-tree-api.node.navigate.sibling.next()|
155156
`<` Previous Sibling |nvim-tree-api.node.navigate.sibling.prev()|
156157
`.` Run Command |nvim-tree-api.node.run.cmd()|
@@ -188,6 +189,7 @@ Show the mappings: `g?`
188189
`R` Refresh |nvim-tree-api.tree.reload()|
189190
`s` Run System |nvim-tree-api.node.run.system()|
190191
`S` Search |nvim-tree-api.tree.search_node()|
192+
`u` Rename: Full Path |nvim-tree-api.fs.rename_full()|
191193
`U` Toggle Filter: Hidden |nvim-tree-api.tree.toggle_custom_filter()|
192194
`W` Collapse |nvim-tree-api.tree.collapse_all()|
193195
`x` Cut |nvim-tree-api.fs.cut()|
@@ -1719,6 +1721,12 @@ fs.rename_sub({node}) *nvim-tree-api.fs.rename_sub()*
17191721
Parameters: ~
17201722
{node} (Node) file or folder
17211723

1724+
fs.rename_full({node}) *nvim-tree-api.fs.rename_full()*
1725+
Prompt to rename a file or folder by absolute path.
1726+
1727+
Parameters: ~
1728+
{node} (Node) file or folder
1729+
17221730
fs.cut({node}) *nvim-tree-api.fs.cut()*
17231731
Cut a file or folder to the nvim-tree clipboard.
17241732

@@ -1810,7 +1818,12 @@ node.open.tab_drop()
18101818
node.open.preview() *nvim-tree-api.node.open.preview()*
18111819
|nvim-tree-api.node.edit()|, file buffer will have |bufhidden| set to `delete`.
18121820

1813-
node.navigate.git.next() *nvim-tree-api.node.navigate.git.next()*
1821+
node.open.preview_no_picker() *nvim-tree-api.node.open.preview_no_picker()*
1822+
|nvim-tree-api.node.edit()|, file buffer will have |bufhidden| set to `delete`.
1823+
window picker will never be used as per
1824+
|nvim-tree.actions.open_file.window_picker.enable| `false`
1825+
1826+
node.navigate.git.next() *nvim-tree-api.node.navigate.git.next()*
18141827
Navigate to the next item showing git status.
18151828

18161829
node.navigate.git.prev() *nvim-tree-api.node.navigate.git.prev()*
@@ -2060,58 +2073,60 @@ You are encouraged to copy these to your own |nvim-tree.on_attach| function.
20602073
end
20612074
20622075
-- BEGIN_DEFAULT_ON_ATTACH
2063-
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
2064-
vim.keymap.set('n', '<C-e>', api.node.open.replace_tree_buffer, opts('Open: In Place'))
2065-
vim.keymap.set('n', '<C-k>', api.node.show_info_popup, opts('Info'))
2066-
vim.keymap.set('n', '<C-r>', api.fs.rename_sub, opts('Rename: Omit Filename'))
2067-
vim.keymap.set('n', '<C-t>', api.node.open.tab, opts('Open: New Tab'))
2068-
vim.keymap.set('n', '<C-v>', api.node.open.vertical, opts('Open: Vertical Split'))
2069-
vim.keymap.set('n', '<C-x>', api.node.open.horizontal, opts('Open: Horizontal Split'))
2070-
vim.keymap.set('n', '<BS>', api.node.navigate.parent_close, opts('Close Directory'))
2071-
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
2072-
vim.keymap.set('n', '<Tab>', api.node.open.preview, opts('Open Preview'))
2073-
vim.keymap.set('n', '>', api.node.navigate.sibling.next, opts('Next Sibling'))
2074-
vim.keymap.set('n', '<', api.node.navigate.sibling.prev, opts('Previous Sibling'))
2075-
vim.keymap.set('n', '.', api.node.run.cmd, opts('Run Command'))
2076-
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
2077-
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
2078-
vim.keymap.set('n', 'bd', api.marks.bulk.delete, opts('Delete Bookmarked'))
2079-
vim.keymap.set('n', 'bt', api.marks.bulk.trash, opts('Trash Bookmarked'))
2080-
vim.keymap.set('n', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
2081-
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle Filter: No Buffer'))
2082-
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
2083-
vim.keymap.set('n', 'C', api.tree.toggle_git_clean_filter, opts('Toggle Filter: Git Clean'))
2084-
vim.keymap.set('n', '[c', api.node.navigate.git.prev, opts('Prev Git'))
2085-
vim.keymap.set('n', ']c', api.node.navigate.git.next, opts('Next Git'))
2086-
vim.keymap.set('n', 'd', api.fs.remove, opts('Delete'))
2087-
vim.keymap.set('n', 'D', api.fs.trash, opts('Trash'))
2088-
vim.keymap.set('n', 'E', api.tree.expand_all, opts('Expand All'))
2089-
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
2090-
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
2091-
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
2092-
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
2093-
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
2094-
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
2095-
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
2096-
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Filter: Dotfiles'))
2097-
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Filter: Git Ignore'))
2098-
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
2099-
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
2100-
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
2101-
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
2102-
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
2103-
vim.keymap.set('n', 'p', api.fs.paste, opts('Paste'))
2104-
vim.keymap.set('n', 'P', api.node.navigate.parent, opts('Parent Directory'))
2105-
vim.keymap.set('n', 'q', api.tree.close, opts('Close'))
2106-
vim.keymap.set('n', 'r', api.fs.rename, opts('Rename'))
2107-
vim.keymap.set('n', 'R', api.tree.reload, opts('Refresh'))
2108-
vim.keymap.set('n', 's', api.node.run.system, opts('Run System'))
2109-
vim.keymap.set('n', 'S', api.tree.search_node, opts('Search'))
2110-
vim.keymap.set('n', 'U', api.tree.toggle_custom_filter, opts('Toggle Filter: Hidden'))
2111-
vim.keymap.set('n', 'W', api.tree.collapse_all, opts('Collapse'))
2112-
vim.keymap.set('n', 'x', api.fs.cut, opts('Cut'))
2113-
vim.keymap.set('n', 'y', api.fs.copy.filename, opts('Copy Name'))
2114-
vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts('Copy Relative Path'))
2076+
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
2077+
vim.keymap.set('n', '<C-e>', api.node.open.replace_tree_buffer, opts('Open: In Place'))
2078+
vim.keymap.set('n', '<C-k>', api.node.show_info_popup, opts('Info'))
2079+
vim.keymap.set('n', '<C-r>', api.fs.rename_sub, opts('Rename: Omit Filename'))
2080+
vim.keymap.set('n', '<C-t>', api.node.open.tab, opts('Open: New Tab'))
2081+
vim.keymap.set('n', '<C-v>', api.node.open.vertical, opts('Open: Vertical Split'))
2082+
vim.keymap.set('n', '<C-x>', api.node.open.horizontal, opts('Open: Horizontal Split'))
2083+
vim.keymap.set('n', '<BS>', api.node.navigate.parent_close, opts('Close Directory'))
2084+
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
2085+
vim.keymap.set('n', '<Tab>', api.node.open.preview, opts('Open Preview'))
2086+
vim.keymap.set('n', '<S-Tab>', api.node.open.preview_no_picker, opts('Open Preview: No Picker'))
2087+
vim.keymap.set('n', '>', api.node.navigate.sibling.next, opts('Next Sibling'))
2088+
vim.keymap.set('n', '<', api.node.navigate.sibling.prev, opts('Previous Sibling'))
2089+
vim.keymap.set('n', '.', api.node.run.cmd, opts('Run Command'))
2090+
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
2091+
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
2092+
vim.keymap.set('n', 'bd', api.marks.bulk.delete, opts('Delete Bookmarked'))
2093+
vim.keymap.set('n', 'bt', api.marks.bulk.trash, opts('Trash Bookmarked'))
2094+
vim.keymap.set('n', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
2095+
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle Filter: No Buffer'))
2096+
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
2097+
vim.keymap.set('n', 'C', api.tree.toggle_git_clean_filter, opts('Toggle Filter: Git Clean'))
2098+
vim.keymap.set('n', '[c', api.node.navigate.git.prev, opts('Prev Git'))
2099+
vim.keymap.set('n', ']c', api.node.navigate.git.next, opts('Next Git'))
2100+
vim.keymap.set('n', 'd', api.fs.remove, opts('Delete'))
2101+
vim.keymap.set('n', 'D', api.fs.trash, opts('Trash'))
2102+
vim.keymap.set('n', 'E', api.tree.expand_all, opts('Expand All'))
2103+
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
2104+
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
2105+
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
2106+
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
2107+
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
2108+
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
2109+
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
2110+
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Filter: Dotfiles'))
2111+
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Filter: Git Ignore'))
2112+
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
2113+
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
2114+
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
2115+
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
2116+
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
2117+
vim.keymap.set('n', 'p', api.fs.paste, opts('Paste'))
2118+
vim.keymap.set('n', 'P', api.node.navigate.parent, opts('Parent Directory'))
2119+
vim.keymap.set('n', 'q', api.tree.close, opts('Close'))
2120+
vim.keymap.set('n', 'r', api.fs.rename, opts('Rename'))
2121+
vim.keymap.set('n', 'R', api.tree.reload, opts('Refresh'))
2122+
vim.keymap.set('n', 's', api.node.run.system, opts('Run System'))
2123+
vim.keymap.set('n', 'S', api.tree.search_node, opts('Search'))
2124+
vim.keymap.set('n', 'u', api.fs.rename_full, opts('Rename: Full Path'))
2125+
vim.keymap.set('n', 'U', api.tree.toggle_custom_filter, opts('Toggle Filter: Hidden'))
2126+
vim.keymap.set('n', 'W', api.tree.collapse_all, opts('Collapse'))
2127+
vim.keymap.set('n', 'x', api.fs.cut, opts('Cut'))
2128+
vim.keymap.set('n', 'y', api.fs.copy.filename, opts('Copy Name'))
2129+
vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts('Copy Relative Path'))
21152130
vim.keymap.set('n', '<2-LeftMouse>', api.node.open.edit, opts('Open'))
21162131
vim.keymap.set('n', '<2-RightMouse>', api.tree.change_root_to_node, opts('CD'))
21172132
-- END_DEFAULT_ON_ATTACH

lua/nvim-tree/actions/fs/copy-paste.lua

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,14 @@ local function do_single_paste(source, dest, action_type, action_fn)
105105
end
106106

107107
if dest_stats then
108+
local input_opts = {
109+
prompt = "Rename to ",
110+
default = dest,
111+
completion = "dir",
112+
}
113+
108114
if source == dest then
109-
vim.ui.input({ prompt = "Rename to ", default = dest, completion = "dir" }, function(new_dest)
115+
vim.ui.input(input_opts, function(new_dest)
110116
utils.clear_prompt()
111117
if new_dest then
112118
do_single_paste(source, new_dest, action_type, action_fn)
@@ -120,7 +126,7 @@ local function do_single_paste(source, dest, action_type, action_fn)
120126
if item_short == "y" then
121127
on_process()
122128
elseif item_short == "" or item_short == "r" then
123-
vim.ui.input({ prompt = "Rename to ", default = dest, completion = "dir" }, function(new_dest)
129+
vim.ui.input(input_opts, function(new_dest)
124130
utils.clear_prompt()
125131
if new_dest then
126132
do_single_paste(source, new_dest, action_type, action_fn)

lua/nvim-tree/actions/fs/create-file.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ function M.fn(node)
4747

4848
local containing_folder = get_containing_folder(node)
4949

50-
local input_opts = { prompt = "Create file ", default = containing_folder, completion = "file" }
50+
local input_opts = {
51+
prompt = "Create file ",
52+
default = containing_folder,
53+
completion = "file",
54+
}
5155

5256
vim.ui.input(input_opts, function(new_file_path)
5357
utils.clear_prompt()

lua/nvim-tree/actions/fs/rename-file.lua

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ local M = {
1010
}
1111

1212
local ALLOWED_MODIFIERS = {
13+
[":p"] = true,
1314
[":p:h"] = true,
1415
[":t"] = true,
1516
[":t:r"] = true,
@@ -77,7 +78,11 @@ function M.fn(default_modifier)
7778
default_path = default_path .. "/"
7879
end
7980

80-
local input_opts = { prompt = "Rename to ", default = default_path, completion = "file" }
81+
local input_opts = {
82+
prompt = "Rename to ",
83+
default = default_path,
84+
completion = "file",
85+
}
8186

8287
vim.ui.input(input_opts, function(new_file_path)
8388
utils.clear_prompt()

lua/nvim-tree/actions/node/open-file.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ end
186186

187187
local function get_target_winid(mode)
188188
local target_winid
189-
if not M.window_picker.enable or mode == "edit_no_picker" then
189+
if not M.window_picker.enable or mode == "edit_no_picker" or mode == "preview_no_picker" then
190190
target_winid = lib.target_winid
191191

192192
-- first available window
@@ -275,7 +275,7 @@ local function open_in_new_window(filename, mode)
275275
cmd = string.format("edit %s", fname)
276276
end
277277

278-
if mode == "preview" and view.View.float.enable then
278+
if (mode == "preview" or mode == "preview_no_picker") and view.View.float.enable then
279279
-- ignore "WinLeave" autocmd on preview
280280
-- because the registered "WinLeave"
281281
-- will kill the floating window immediately
@@ -326,7 +326,7 @@ function M.fn(mode, filename)
326326
local buf_loaded = is_already_loaded(filename)
327327

328328
local found_win = utils.get_win_buf_from_path(filename)
329-
if found_win and mode == "preview" then
329+
if found_win and (mode == "preview" or mode == "preview_no_picker") then
330330
return
331331
end
332332

@@ -341,7 +341,7 @@ function M.fn(mode, filename)
341341
view.resize()
342342
end
343343

344-
if mode == "preview" then
344+
if mode == "preview" or mode == "preview_no_picker" then
345345
return on_preview(buf_loaded)
346346
end
347347

lua/nvim-tree/actions/node/system-open.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ function M.fn(node)
1717
}
1818
table.insert(process.args, node.link_to or node.absolute_path)
1919

20-
local opts = { args = process.args, stdio = { nil, nil, process.stderr }, detached = true }
20+
local opts = {
21+
args = process.args,
22+
stdio = { nil, nil, process.stderr },
23+
detached = true,
24+
}
2125

2226
process.handle, process.pid = vim.loop.spawn(process.cmd, opts, function(code)
2327
process.stderr:read_stop()

lua/nvim-tree/actions/tree/open.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ function M.fn(opts)
2929
view.focus()
3030
else
3131
-- open
32-
lib.open { path = opts.path, current_window = opts.current_window, winid = opts.winid }
32+
lib.open {
33+
path = opts.path,
34+
current_window = opts.current_window,
35+
winid = opts.winid,
36+
}
3337
end
3438

3539
-- find file

lua/nvim-tree/actions/tree/toggle.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ function M.fn(opts, no_focus, cwd, bang)
4545
view.close()
4646
else
4747
-- open
48-
lib.open { path = opts.path, current_window = opts.current_window, winid = opts.winid }
48+
lib.open {
49+
path = opts.path,
50+
current_window = opts.current_window,
51+
winid = opts.winid,
52+
}
4953

5054
-- find file
5155
if M.config.update_focused_file.enable or opts.find_file then

0 commit comments

Comments
 (0)