feat(#2092): add api.node.navigate.open.next, prev (#2093)

* feat(#2092): add api.node.navigate.open.next, prev

* feat(#2092): add api.node.navigate.listed.next, prev

* feat(#2092): add api.node.navigate.opened.next, prev

* feat(#2092): add api.node.navigate.opened.next, prev
This commit is contained in:
Alexander Courtis 2023-04-03 14:23:03 +10:00 committed by GitHub
parent 7cd722ff3a
commit 0c9bfe7225
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 59 additions and 32 deletions

View file

@ -7,3 +7,6 @@ end_of_line = lf
[*.lua] [*.lua]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
[nvim-tree-lua.txt]
max_line_length = 78

View file

@ -868,8 +868,10 @@ UI rendering setup
Type: `boolean`, Default: `false` Type: `boolean`, Default: `false`
*nvim-tree.renderer.highlight_opened_files* *nvim-tree.renderer.highlight_opened_files*
Highlight icons and/or names for opened files using the Highlight icons and/or names for |bufloaded()| files using the
`NvimTreeOpenedFile` highlight group. `NvimTreeOpenedFile` highlight group.
See |nvim-tree.api.navigate.opened.next()| and
|nvim-tree.api.navigate.opened.prev()|
Value can be `"none"`, `"icon"`, `"name"` or `"all"`. Value can be `"none"`, `"icon"`, `"name"` or `"all"`.
Type: `string`, Default: `"none"` Type: `string`, Default: `"none"`
@ -1033,7 +1035,7 @@ Filtering options.
Type: `boolean`, Default: `false` Type: `boolean`, Default: `false`
*nvim-tree.filters.no_buffer* *nvim-tree.filters.no_buffer*
Do not show files that have no listed buffer. Do not show files that have no |buflisted()| buffer.
Toggle via the `toggle_no_buffer` action, default mapping `B`. Toggle via the `toggle_no_buffer` action, default mapping `B`.
For performance reasons this may not immediately update on buffer For performance reasons this may not immediately update on buffer
delete/wipe. A reload or filesystem event will result in an update. delete/wipe. A reload or filesystem event will result in an update.
@ -1269,7 +1271,7 @@ Configuration for diagnostic logging.
Type: `boolean`, Default: `false` Type: `boolean`, Default: `false`
============================================================================== ==============================================================================
5. API *nvim-tree-api* 5. API *nvim-tree-api*
Nvim-tree's public API can be used to access features. Nvim-tree's public API can be used to access features.
> >
@ -1315,55 +1317,55 @@ api.tree.toggle({opts}) *nvim-tree.api.tree.toggle()*
|nvim-tree.update_focused_file.update_root| |nvim-tree.update_focused_file.update_root|
• {focus} (boolean, true) focus the tree when opening • {focus} (boolean, true) focus the tree when opening
api.tree.close() *nvim-tree.api.tree.close()* api.tree.close() *nvim-tree.api.tree.close()*
Close the tree, affecting all tabs as per |nvim-tree.tab.sync.close| Close the tree, affecting all tabs as per |nvim-tree.tab.sync.close|
api.tree.close_in_this_tab() *nvim-tree.api.tree.close_in_this_tab()* api.tree.close_in_this_tab() *nvim-tree.api.tree.close_in_this_tab()*
Close the tree in this tab only. Close the tree in this tab only.
api.tree.close_in_all_tabs() *nvim-tree.api.tree.close_in_all_tabs()* api.tree.close_in_all_tabs() *nvim-tree.api.tree.close_in_all_tabs()*
Close the tree in all tabs. Close the tree in all tabs.
api.tree.focus() *nvim-tree.api.tree.focus()* api.tree.focus() *nvim-tree.api.tree.focus()*
Focus the tree, opening it if necessary. Focus the tree, opening it if necessary.
api.tree.reload() *nvim-tree.api.tree.reload()* api.tree.reload() *nvim-tree.api.tree.reload()*
Refresh the tree. Does nothing if closed. Refresh the tree. Does nothing if closed.
api.tree.change_root({path}) *nvim-tree.api.tree.change_root()* api.tree.change_root({path}) *nvim-tree.api.tree.change_root()*
Change the tree's root to a path. Change the tree's root to a path.
Parameters: ~ Parameters: ~
• {path} (string) absolute or relative path • {path} (string) absolute or relative path
*nvim-tree.api.tree.change_root_to_node()* *nvim-tree.api.tree.change_root_to_node()*
api.tree.change_root_to_node({node}) api.tree.change_root_to_node({node})
Change the tree's root to a folder node or the parent of a file node. Change the tree's root to a folder node or the parent of a file node.
Parameters: ~ Parameters: ~
• {node} (Node) folder or file • {node} (Node) folder or file
*nvim-tree.api.tree.change_root_to_parent()* *nvim-tree.api.tree.change_root_to_parent()*
api.tree.change_root_to_parent({node}) api.tree.change_root_to_parent({node})
Change the tree's root to the parent of a node. Change the tree's root to the parent of a node.
Parameters: ~ Parameters: ~
• {node} (Node) folder or file • {node} (Node) folder or file
api.tree.get_node_under_cursor() *nvim-tree.api.tree.get_node_under_cursor()* api.tree.get_node_under_cursor() *nvim-tree.api.tree.get_node_under_cursor()*
Retrieve the currently focused node. Retrieve the currently focused node.
Return: ~ Return: ~
node or nil if tree is not visible node or nil if tree is not visible
api.tree.get_nodes() *nvim-tree.api.tree.get_nodes()* api.tree.get_nodes() *nvim-tree.api.tree.get_nodes()*
Retrieve a hierarchical list of all the nodes. This is a cloned list for Retrieve a hierarchical list of all the nodes. This is a cloned list for
reference purposes only and should not be passed into other API functions. reference purposes only and should not be passed into other API functions.
Return: ~ Return: ~
table of nodes table of nodes
api.tree.find_file({opts}) *nvim-tree.api.tree.find_file()* api.tree.find_file({opts}) *nvim-tree.api.tree.find_file()*
Find and focus a file or folder in the tree. Finds current buffer unless Find and focus a file or folder in the tree. Finds current buffer unless
otherwise specified. otherwise specified.
@ -1377,39 +1379,39 @@ api.tree.find_file({opts}) *nvim-tree.api.tree.find_file()*
• {update_root} (boolean, false) see |nvim-tree.update_focused_file.update_root| • {update_root} (boolean, false) see |nvim-tree.update_focused_file.update_root|
• {focus} (boolean, false) focus the tree • {focus} (boolean, false) focus the tree
api.tree.search_node() *nvim-tree.api.tree.search_node()* api.tree.search_node() *nvim-tree.api.tree.search_node()*
Open the search dialogue as per the search_node action. Open the search dialogue as per the search_node action.
api.tree.collapse_all({keep_buffers}) *nvim-tree.api.tree.collapse_all()* api.tree.collapse_all({keep_buffers}) *nvim-tree.api.tree.collapse_all()*
Collapse the tree. Collapse the tree.
Parameters: ~ Parameters: ~
• {keep_buffers} (boolean) do not collapse nodes with open buffers. • {keep_buffers} (boolean) do not collapse nodes with open buffers.
api.tree.expand_all({keep_buffers}) *nvim-tree.api.tree.expand_all()* api.tree.expand_all({keep_buffers}) *nvim-tree.api.tree.expand_all()*
Expand all nodes in the tree. Expand all nodes in the tree.
*nvim-tree.api.tree.toggle_gitignore_filter()* *nvim-tree.api.tree.toggle_gitignore_filter()*
api.tree.toggle_gitignore_filter() api.tree.toggle_gitignore_filter()
Toggle |nvim-tree.git.ignore| filter. Toggle |nvim-tree.git.ignore| filter.
*nvim-tree.api.tree.toggle_git_clean_filter()* *nvim-tree.api.tree.toggle_git_clean_filter()*
api.tree.toggle_git_clean_filter() api.tree.toggle_git_clean_filter()
Toggle |nvim-tree.filters.git_clean| filter. Toggle |nvim-tree.filters.git_clean| filter.
*nvim-tree.api.tree.toggle_no_buffer_filter()* *nvim-tree.api.tree.toggle_no_buffer_filter()*
api.tree.toggle_no_buffer_filter() api.tree.toggle_no_buffer_filter()
Toggle |nvim-tree.filters.no_buffer| filter. Toggle |nvim-tree.filters.no_buffer| filter.
*nvim-tree.api.tree.toggle_custom_filter()* *nvim-tree.api.tree.toggle_custom_filter()*
api.tree.toggle_custom_filter() api.tree.toggle_custom_filter()
Toggle |nvim-tree.filters.custom| filter. Toggle |nvim-tree.filters.custom| filter.
*nvim-tree.api.tree.toggle_hidden_filter()* *nvim-tree.api.tree.toggle_hidden_filter()*
api.tree.toggle_hidden_filter() api.tree.toggle_hidden_filter()
Toggle |nvim-tree.filters.dotfiles| filter. Toggle |nvim-tree.filters.dotfiles| filter.
api.tree.toggle_help() *nvim-tree.api.tree.toggle_help()* api.tree.toggle_help() *nvim-tree.api.tree.toggle_help()*
Toggle help view. Toggle help view.
- api.fs: *nvim-tree.api.fs* - api.fs: *nvim-tree.api.fs*
@ -1429,7 +1431,7 @@ api.tree.toggle_help() *nvim-tree.api.tree.toggle_help()*
- copy.filename - copy.filename
- copy.relative_path - copy.relative_path
- api.node: *nvim-tree.api.node* - api.node: *nvim-tree.api.node*
- open.edit - open.edit
- open.replace_tree_buffer - open.replace_tree_buffer
- open.no_window_picker - open.no_window_picker
@ -1446,23 +1448,41 @@ api.tree.toggle_help() *nvim-tree.api.tree.toggle_help()*
- navigate.sibling.last - navigate.sibling.last
- navigate.parent - navigate.parent
- navigate.parent_close - navigate.parent_close
- navigate.git.next
- navigate.git.prev
- navigate.diagnostics.next
- navigate.diagnostics.prev
- api.git: *nvim-tree.api.git* api.node.navigate.git.next() *nvim-tree.api.navigate.git.next()*
Navigate to the next item showing git status.
api.node.navigate.git.prev() *nvim-tree.api.navigate.git.prev()*
Navigate to the previous item showing git status.
*nvim-tree.api.navigate.diagnostics.next()*
api.node.navigate.diagnostics.next()
Navigate to the next item showing diagnostic status.
*nvim-tree.api.navigate.diagnostics.prev()*
api.node.navigate.diagnostics.prev()
Navigate to the next item showing diagnostic status.
api.node.navigate.opened.next() *nvim-tree.api.navigate.opened.next()*
Navigate to the next |bufloaded()| item.
See |nvim-tree.renderer.highlight_opened_files|
api.node.navigate.opened.prev() *nvim-tree.api.navigate.opened.prev()*
Navigate to the previous |bufloaded()| item.
See |nvim-tree.renderer.highlight_opened_files|
- api.git: *nvim-tree.api.git*
- reload - reload
- api.events: *nvim-tree.api.events* - api.events: *nvim-tree.api.events*
- subscribe `(eventType: Event, callback: function(...args))` - subscribe `(eventType: Event, callback: function(...args))`
- Event (enum type, please see |nvim_tree_events_kind|) - Event (enum type, please see |nvim_tree_events_kind|)
- api.live_filter: *nvim-tree.api.live_filter* - api.live_filter: *nvim-tree.api.live_filter*
- start - start
- clear - clear
- api.marks: *nvim-tree.api.marks* - api.marks: *nvim-tree.api.marks*
- get - get
- list - list
- toggle - toggle

View file

@ -18,6 +18,8 @@ function M.fn(where, what)
valid = explorer_node.get_git_status(node) ~= nil valid = explorer_node.get_git_status(node) ~= nil
elseif what == "diag" then elseif what == "diag" then
valid = node.diag_status ~= nil valid = node.diag_status ~= nil
elseif what == "opened" then
valid = vim.fn.bufloaded(node.absolute_path) ~= 0
end end
if not first and valid then if not first and valid then

View file

@ -2,7 +2,7 @@ local notify = require "nvim-tree.notify"
local Api = { local Api = {
tree = {}, tree = {},
node = { navigate = { sibling = {}, git = {}, diagnostics = {} }, run = {}, open = {} }, node = { navigate = { sibling = {}, git = {}, diagnostics = {}, opened = {} }, run = {}, open = {} },
events = {}, events = {},
marks = { bulk = {}, navigate = {} }, marks = { bulk = {}, navigate = {} },
fs = { copy = {} }, fs = { copy = {} },
@ -158,6 +158,8 @@ Api.node.navigate.git.next = inject_node(require("nvim-tree.actions.moves.item")
Api.node.navigate.git.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "git")) Api.node.navigate.git.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "git"))
Api.node.navigate.diagnostics.next = inject_node(require("nvim-tree.actions.moves.item").fn("next", "diag")) Api.node.navigate.diagnostics.next = inject_node(require("nvim-tree.actions.moves.item").fn("next", "diag"))
Api.node.navigate.diagnostics.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "diag")) Api.node.navigate.diagnostics.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "diag"))
Api.node.navigate.opened.next = inject_node(require("nvim-tree.actions.moves.item").fn("next", "opened"))
Api.node.navigate.opened.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "opened"))
Api.git.reload = require("nvim-tree.actions.reloaders.reloaders").reload_git Api.git.reload = require("nvim-tree.actions.reloaders.reloaders").reload_git