1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-04 08:40:05 +08:00
SpaceVim/bundle/neo-tree.nvim/lua/neo-tree/sources/git_status/init.lua
2023-05-30 21:09:18 +08:00

95 lines
2.4 KiB
Lua

--This file should have all functions that are in the public api and either set
--or read the state of this source.
local vim = vim
local utils = require("neo-tree.utils")
local renderer = require("neo-tree.ui.renderer")
local items = require("neo-tree.sources.git_status.lib.items")
local events = require("neo-tree.events")
local manager = require("neo-tree.sources.manager")
local M = {
name = "git_status",
display_name = "  Git "
}
local wrap = function(func)
return utils.wrap(func, M.name)
end
local get_state = function()
return manager.get_state(M.name)
end
---Navigate to the given path.
---@param path string Path to navigate to. If empty, will navigate to the cwd.
M.navigate = function(state, path, path_to_reveal)
state.dirty = false
if path_to_reveal then
renderer.position.set(state, path_to_reveal)
end
items.get_git_status(state)
end
M.refresh = function()
manager.refresh(M.name)
end
---Configures the plugin, should be called before the plugin is used.
---@param config table Configuration table containing any keys that the user
--wants to change from the defaults. May be empty to accept default values.
M.setup = function(config, global_config)
if config.before_render then
--convert to new event system
manager.subscribe(M.name, {
event = events.BEFORE_RENDER,
handler = function(state)
local this_state = get_state()
if state == this_state then
config.before_render(this_state)
end
end,
})
end
if global_config.enable_refresh_on_write then
manager.subscribe(M.name, {
event = events.VIM_BUFFER_CHANGED,
handler = function(args)
if utils.is_real_file(args.afile) then
M.refresh()
end
end,
})
end
if config.bind_to_cwd then
manager.subscribe(M.name, {
event = events.VIM_DIR_CHANGED,
handler = M.refresh,
})
end
if global_config.enable_diagnostics then
manager.subscribe(M.name, {
event = events.VIM_DIAGNOSTIC_CHANGED,
handler = wrap(manager.diagnostics_changed),
})
end
--Configure event handlers for modified files
if global_config.enable_modified_markers then
manager.subscribe(M.name, {
event = events.VIM_BUFFER_MODIFIED_SET,
handler = wrap(manager.opened_buffers_changed),
})
end
manager.subscribe(M.name, {
event = events.GIT_EVENT,
handler = M.refresh,
})
end
return M