Skip to content

Commit aaee4cd

Browse files
umlx5halex-courtis
andauthored
feat: api.node.open.preview_no_picker with default mapping <S-Tab> (#2464)
* feat: add preview with no window picker action * feat: preview_no_window_picker -> preview_no_picker --------- Co-authored-by: Alexander Courtis <alex@courtis.org>
1 parent 0882354 commit aaee4cd

File tree

4 files changed

+122
-123
lines changed

4 files changed

+122
-123
lines changed

doc/nvim-tree-lua.txt

+62-55
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ Show the mappings: `g?`
150150
`<BS>` Close Directory |nvim-tree-api.node.navigate.parent_close()|
151151
`<CR>` Open |nvim-tree-api.node.open.edit()|
152152
`<Tab>` Open Preview |nvim-tree-api.node.open.preview()|
153+
`<S-Tab>` Open Preview: No Picker |nvim-tree-api.node.open.preview_no_picker()|
153154
`>` Next Sibling |nvim-tree-api.node.navigate.sibling.next()|
154155
`<` Previous Sibling |nvim-tree-api.node.navigate.sibling.prev()|
155156
`.` Run Command |nvim-tree-api.node.run.cmd()|
@@ -187,8 +188,8 @@ Show the mappings: `g?`
187188
`R` Refresh |nvim-tree-api.tree.reload()|
188189
`s` Run System |nvim-tree-api.node.run.system()|
189190
`S` Search |nvim-tree-api.tree.search_node()|
190-
`U` Toggle Filter: Hidden |nvim-tree-api.tree.toggle_custom_filter()|
191191
`u` Rename: Full Path |nvim-tree-api.fs.rename_full()|
192+
`U` Toggle Filter: Hidden |nvim-tree-api.tree.toggle_custom_filter()|
192193
`W` Collapse |nvim-tree-api.tree.collapse_all()|
193194
`x` Cut |nvim-tree-api.fs.cut()|
194195
`y` Copy Name |nvim-tree-api.fs.copy.filename()|
@@ -1815,7 +1816,12 @@ node.open.tab_drop()
18151816
node.open.preview() *nvim-tree-api.node.open.preview()*
18161817
|nvim-tree-api.node.edit()|, file buffer will have |bufhidden| set to `delete`.
18171818

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

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

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

+4-4
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/api.lua

+2-11
Original file line numberDiff line numberDiff line change
@@ -171,16 +171,6 @@ local function open_or_expand_or_dir_up(mode)
171171
end
172172
end
173173

174-
local function open_preview(node)
175-
if node.name == ".." then
176-
require("nvim-tree.actions.root.change-dir").fn ".."
177-
elseif node.nodes then
178-
require("nvim-tree.lib").expand_or_collapse(node)
179-
else
180-
edit("preview", node)
181-
end
182-
end
183-
184174
Api.node.open.edit = wrap_node(open_or_expand_or_dir_up "edit")
185175
Api.node.open.drop = wrap_node(open_or_expand_or_dir_up "drop")
186176
Api.node.open.tab_drop = wrap_node(open_or_expand_or_dir_up "tab_drop")
@@ -189,7 +179,8 @@ Api.node.open.no_window_picker = wrap_node(open_or_expand_or_dir_up "edit_no_pic
189179
Api.node.open.vertical = wrap_node(open_or_expand_or_dir_up "vsplit")
190180
Api.node.open.horizontal = wrap_node(open_or_expand_or_dir_up "split")
191181
Api.node.open.tab = wrap_node(open_or_expand_or_dir_up "tabnew")
192-
Api.node.open.preview = wrap_node(open_preview)
182+
Api.node.open.preview = wrap_node(open_or_expand_or_dir_up "preview")
183+
Api.node.open.preview_no_picker = wrap_node(open_or_expand_or_dir_up "preview_no_picker")
193184

194185
Api.node.show_info_popup = wrap_node(require("nvim-tree.actions.node.file-popup").toggle_file_info)
195186
Api.node.run.cmd = wrap_node(require("nvim-tree.actions.node.run-command").run_file_command)

0 commit comments

Comments
 (0)