--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