* chore(mappings): migrate legacy mappings under the hood
* chore(mappings): POC for help and :help on_attach keymaps
* chore(mappings): POC for help and :help on_attach keymaps
* chore(mappings): add desc to all mappings, show in help, reformat help
* chore(mappings): add desc to all mappings
* chore(mappings): add desc to all mappings
* chore(mappings): escape help keys
* chore(mappings): migrate legacy mappings under the hood: map keymap to legacy mappings
* chore(mappings): migrate legacy mappings under the hood: remove dispatch
* Revert "chore(mappings): migrate legacy mappings under the hood: remove dispatch"
This reverts commit f6f439ba59.
* chore(mappings): migrate legacy mappings under the hood: pass node to action_cb
* chore(mappings): migrate legacy mappings under the hood: remove dispatch
* chore(mappings): migrate legacy mappings under the hood: replace mappigns with keymaps in help
* chore(mappings): generate on_attach from user's legacy mappings
* chore(mappings): generate on_attach from user's legacy mappings
* chore(mappings): merge cleanup
* chore(mappings): use default mappings when on_attach not present, log legacy migration
* on_attach is default or user only, legacy and generation includes defaults (#1777)
* chore(mappings): remove mappings via vim.keymap.del instead of filtering mappings, to allow for multiple ways of specifying a key
* doc: specify that the terminal emulator must be configured to use the patched font
* feat(renderer): add NvimTreeOpenedFolderIcon NvimTreeClosedFolderIcon (#1768)
* feat: Add highlight group for opened folder
closes #1674
* docs: Add NvimTreeOpenedFolderIcon default
* feat: Add NvimTreeClosedFolderIcon highlight group
Defaults to NvimTreeFolderIcon
* feat: add diagnostics.show_on_open_dirs git.show_on_open_dirs (#1778)
* feat(diagnostics): only show diagnostic on closed folder
* feat(git): only show git icon on closed folder
* docs: Update feature_request.md (#1788)
* Update feature_request.md
Closes #1654
* Update feature_request.md
Co-authored-by: Alexander Courtis <alex@courtis.org>
* 1786 git next prev land on dirs (#1787)
* Filtered dir with git status that are open when show_on_open_dir is false
* refactored for single source of truth of existence of git status on a node
Putting `has_git_status()` in `explorer.common` because that's where node.status is constructed
Or at least I think that's where it's constructed
* 1786 semantic nit
Co-authored-by: Alexander Courtis <alex@courtis.org>
* fix(git): git rename not showing up for the renamed file (#1783)
* fixed git rename not showing up for the renamed file
* considered " -> " being a part of the filename
Fixed -> pattern to escape -
Fixed "\"" and "\\" in filename
* using string.find(, , true) to match plain ->
* Using -z and removed unnecessary logic
* feat(view): always enable cursorline, users may change this behaviour via Event.TreeOpen (#1814)
* Update view.lua
* set cursorline to true
* feat(event): dispatch Event.NodeRenamed on cut-paste (#1817)
* feat(view): add filters.git_clean, filters.no_buffer (#1784)
* feat(view): add filters.git_clean
* feat(view): add filters.git_clean
* feat(view): add filters.no_buffer
* feat(view): filters.no_buffer misses unloaded, handles buffer in/out
* feat(view): filters.no_buffer matches directories specifically
* feat(view): filters.no_buffer clarify targets
* feat: add placeholder filters.diagnostics_ok, refactor filters
* feat(view): remove placeholder filters.diagnostics_ok
* doc: consolidate and clarify :help examples
* doc: format help
* feat: paste and create always target closed folder, remove create_in_closed_folder (#1802)
* Fix default for file creation in closed directories
* Make paste in closed directories consistent with create
* doc: clarify create_in_closed_folder
* Remove create_in_closed_folder option
* doc: clarify create_in_closed_folder removal message (whoops)
Co-authored-by: Alexander Courtis <alex@courtis.org>
* on_attach is user's or default, nothing else; legacy generated on_attach includes defaults
Co-authored-by: baahrens <bahrens@compeon.de>
Co-authored-by: Richard Li <38484873+chomosuke@users.noreply.github.com>
Co-authored-by: gegoune <69750637+gegoune@users.noreply.github.com>
Co-authored-by: rishabhjain9191 <rishabh.jain9191@gmail.com>
Co-authored-by: Anton <14187674+antosha417@users.noreply.github.com>
Co-authored-by: Eric Haynes <ehaynes99@gmail.com>
* on_attach_default hardcoded
* format default_on_attach
* source default on_attach directly
* remove human mappings help
* simplified on_attach generation
* simplified on_attach generation
* generate default on_attach
* generate default on_attach
* split out keymap_legacy
* add recently introduced mappings
* legacy api.config.mappings.active and default
* legacy api.config.mappings.active and default
* on_attach help and readme
* legacy generate handles action = ""
* legacy generate handles action =
* legacy generate gives defaults when no user mappings
* legacy generate handles action = ""
* legacy generate api handles overrides
* legacy generate handles subsequent setup, on_attach retains deep copies of legacy config
* add wiki link to generated on_attach
* add opts helper function for on_attach, prefixing 'nvim-tree: '
---------
Co-authored-by: kiyan <yazdani.kiyan@protonmail.com>
Co-authored-by: baahrens <bahrens@compeon.de>
Co-authored-by: Richard Li <38484873+chomosuke@users.noreply.github.com>
Co-authored-by: gegoune <69750637+gegoune@users.noreply.github.com>
Co-authored-by: rishabhjain9191 <rishabh.jain9191@gmail.com>
Co-authored-by: Anton <14187674+antosha417@users.noreply.github.com>
Co-authored-by: Eric Haynes <ehaynes99@gmail.com>
181 lines
7.4 KiB
Lua
181 lines
7.4 KiB
Lua
local Api = {
|
|
tree = {},
|
|
node = { navigate = { sibling = {}, git = {}, diagnostics = {} }, run = {}, open = {} },
|
|
events = {},
|
|
marks = { bulk = {}, navigate = {} },
|
|
fs = { copy = {} },
|
|
git = {},
|
|
live_filter = {},
|
|
config = { mappings = {} },
|
|
}
|
|
|
|
local function inject_node(f)
|
|
return function(node, ...)
|
|
node = node or require("nvim-tree.lib").get_node_at_cursor()
|
|
f(node, ...)
|
|
end
|
|
end
|
|
|
|
---@class ApiTreeOpenOpts
|
|
---@field path string|nil path
|
|
---@field current_window boolean|nil default false
|
|
---@field find_file boolean|nil default false
|
|
---@field update_root boolean|nil default false
|
|
|
|
Api.tree.open = function(...)
|
|
require("nvim-tree").open(...)
|
|
end
|
|
|
|
---@class ApiTreeToggleOpts
|
|
---@field path string|nil
|
|
---@field current_window boolean|nil default false
|
|
---@field find_file boolean|nil default false
|
|
---@field update_root boolean|nil default false
|
|
---@field focus boolean|nil default true
|
|
|
|
Api.tree.toggle = function(...)
|
|
require("nvim-tree").toggle(...)
|
|
end
|
|
|
|
Api.tree.close = require("nvim-tree.view").close
|
|
|
|
Api.tree.close_in_this_tab = require("nvim-tree.view").close_this_tab_only
|
|
|
|
Api.tree.close_in_all_tabs = require("nvim-tree.view").close_all_tabs
|
|
|
|
Api.tree.focus = function()
|
|
require("nvim-tree").focus()
|
|
end
|
|
|
|
Api.tree.reload = require("nvim-tree.actions.reloaders.reloaders").reload_explorer
|
|
|
|
Api.tree.change_root = function(...)
|
|
require("nvim-tree").change_dir(...)
|
|
end
|
|
|
|
Api.tree.change_root_to_node = inject_node(function(node)
|
|
if node.name == ".." then
|
|
require("nvim-tree.actions.root.change-dir").fn ".."
|
|
elseif node.nodes ~= nil then
|
|
require("nvim-tree.actions.root.change-dir").fn(require("nvim-tree.lib").get_last_group_node(node).absolute_path)
|
|
end
|
|
end)
|
|
|
|
Api.tree.change_root_to_parent = inject_node(require("nvim-tree.actions.root.dir-up").fn)
|
|
|
|
Api.tree.get_node_under_cursor = require("nvim-tree.lib").get_node_at_cursor
|
|
|
|
Api.tree.get_nodes = require("nvim-tree.lib").get_nodes
|
|
|
|
Api.tree.find_file = require("nvim-tree.actions.finders.find-file").fn
|
|
|
|
Api.tree.search_node = require("nvim-tree.actions.finders.search-node").fn
|
|
|
|
Api.tree.collapse_all = require("nvim-tree.actions.tree-modifiers.collapse-all").fn
|
|
|
|
Api.tree.expand_all = inject_node(require("nvim-tree.actions.tree-modifiers.expand-all").fn)
|
|
|
|
Api.tree.toggle_gitignore_filter = require("nvim-tree.actions.tree-modifiers.toggles").git_ignored
|
|
|
|
Api.tree.toggle_git_clean_filter = require("nvim-tree.actions.tree-modifiers.toggles").git_clean
|
|
|
|
Api.tree.toggle_no_buffer_filter = require("nvim-tree.actions.tree-modifiers.toggles").no_buffer
|
|
|
|
Api.tree.toggle_custom_filter = require("nvim-tree.actions.tree-modifiers.toggles").custom
|
|
|
|
Api.tree.toggle_hidden_filter = require("nvim-tree.actions.tree-modifiers.toggles").dotfiles
|
|
|
|
Api.tree.toggle_help = require("nvim-tree.actions.tree-modifiers.toggles").help
|
|
|
|
Api.fs.create = inject_node(require("nvim-tree.actions.fs.create-file").fn)
|
|
Api.fs.remove = inject_node(require("nvim-tree.actions.fs.remove-file").fn)
|
|
Api.fs.trash = inject_node(require("nvim-tree.actions.fs.trash").fn)
|
|
Api.fs.rename_node = inject_node(require("nvim-tree.actions.fs.rename-file").fn ":t")
|
|
Api.fs.rename = inject_node(require("nvim-tree.actions.fs.rename-file").fn ":t")
|
|
Api.fs.rename_sub = inject_node(require("nvim-tree.actions.fs.rename-file").fn ":p")
|
|
Api.fs.rename_basename = inject_node(require("nvim-tree.actions.fs.rename-file").fn ":t:r")
|
|
Api.fs.cut = inject_node(require("nvim-tree.actions.fs.copy-paste").cut)
|
|
Api.fs.paste = inject_node(require("nvim-tree.actions.fs.copy-paste").paste)
|
|
Api.fs.clear_clipboard = require("nvim-tree.actions.fs.copy-paste").clear_clipboard
|
|
Api.fs.print_clipboard = require("nvim-tree.actions.fs.copy-paste").print_clipboard
|
|
Api.fs.copy.node = inject_node(require("nvim-tree.actions.fs.copy-paste").copy)
|
|
Api.fs.copy.absolute_path = inject_node(require("nvim-tree.actions.fs.copy-paste").copy_absolute_path)
|
|
Api.fs.copy.filename = inject_node(require("nvim-tree.actions.fs.copy-paste").copy_filename)
|
|
Api.fs.copy.relative_path = inject_node(require("nvim-tree.actions.fs.copy-paste").copy_path)
|
|
|
|
local function edit(mode, node)
|
|
local path = node.absolute_path
|
|
if node.link_to and not node.nodes then
|
|
path = node.link_to
|
|
end
|
|
require("nvim-tree.actions.node.open-file").fn(mode, path)
|
|
end
|
|
|
|
local function open_or_expand_or_dir_up(mode)
|
|
return function(node)
|
|
if node.name == ".." then
|
|
require("nvim-tree.actions.root.change-dir").fn ".."
|
|
elseif node.nodes then
|
|
require("nvim-tree.lib").expand_or_collapse(node)
|
|
else
|
|
edit(mode, node)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function open_preview(node)
|
|
if node.nodes or node.name == ".." then
|
|
return
|
|
end
|
|
|
|
edit("preview", node)
|
|
end
|
|
|
|
Api.node.open.edit = inject_node(open_or_expand_or_dir_up "edit")
|
|
Api.node.open.replace_tree_buffer = inject_node(open_or_expand_or_dir_up "edit_in_place")
|
|
Api.node.open.no_window_picker = inject_node(open_or_expand_or_dir_up "edit_no_picker")
|
|
Api.node.open.vertical = inject_node(open_or_expand_or_dir_up "vsplit")
|
|
Api.node.open.horizontal = inject_node(open_or_expand_or_dir_up "split")
|
|
Api.node.open.tab = inject_node(open_or_expand_or_dir_up "tabnew")
|
|
Api.node.open.preview = inject_node(open_preview)
|
|
|
|
Api.node.show_info_popup = inject_node(require("nvim-tree.actions.node.file-popup").toggle_file_info)
|
|
Api.node.run.cmd = inject_node(require("nvim-tree.actions.node.run-command").run_file_command)
|
|
Api.node.run.system = inject_node(require("nvim-tree.actions.node.system-open").fn)
|
|
Api.node.navigate.sibling.next = inject_node(require("nvim-tree.actions.moves.sibling").fn "next")
|
|
Api.node.navigate.sibling.prev = inject_node(require("nvim-tree.actions.moves.sibling").fn "prev")
|
|
Api.node.navigate.sibling.first = inject_node(require("nvim-tree.actions.moves.sibling").fn "first")
|
|
Api.node.navigate.sibling.last = inject_node(require("nvim-tree.actions.moves.sibling").fn "last")
|
|
Api.node.navigate.parent = inject_node(require("nvim-tree.actions.moves.parent").fn(false))
|
|
Api.node.navigate.parent_close = inject_node(require("nvim-tree.actions.moves.parent").fn(true))
|
|
Api.node.navigate.git.next = inject_node(require("nvim-tree.actions.moves.item").fn("next", "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.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "diag"))
|
|
|
|
Api.git.reload = require("nvim-tree.actions.reloaders.reloaders").reload_git
|
|
|
|
Api.events.subscribe = require("nvim-tree.events").subscribe
|
|
Api.events.Event = require("nvim-tree.events").Event
|
|
|
|
Api.live_filter.start = require("nvim-tree.live-filter").start_filtering
|
|
Api.live_filter.clear = require("nvim-tree.live-filter").clear_filter
|
|
|
|
Api.marks.get = inject_node(require("nvim-tree.marks").get_mark)
|
|
Api.marks.list = require("nvim-tree.marks").get_marks
|
|
Api.marks.toggle = inject_node(require("nvim-tree.marks").toggle_mark)
|
|
Api.marks.clear = require("nvim-tree.marks").clear_marks
|
|
Api.marks.bulk.move = require("nvim-tree.marks.bulk-move").bulk_move
|
|
Api.marks.navigate.next = require("nvim-tree.marks.navigation").next
|
|
Api.marks.navigate.prev = require("nvim-tree.marks.navigation").prev
|
|
Api.marks.navigate.select = require("nvim-tree.marks.navigation").select
|
|
|
|
Api.config.mappings.active = function()
|
|
return require("nvim-tree.keymap-legacy").active_mappings_clone()
|
|
end
|
|
Api.config.mappings.default = function()
|
|
return require("nvim-tree.keymap-legacy").default_mappings_clone()
|
|
end
|
|
|
|
return Api
|