From fcbaa006de2ac9802046bfeff51ad514abdde01c Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Wed, 18 Dec 2024 16:50:04 -0500 Subject: [PATCH] AutoYADM commit: 2024-12-18 16:50:04 --- .config/nvim/lua/oil-extras.lua | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/.config/nvim/lua/oil-extras.lua b/.config/nvim/lua/oil-extras.lua index e69de29b..696e1375 100644 --- a/.config/nvim/lua/oil-extras.lua +++ b/.config/nvim/lua/oil-extras.lua @@ -0,0 +1,49 @@ +local M = {} + +local parse_output = function(proc) + local result = proc:wait() + local ret = {} + if result.code == 0 then + for line in vim.gsplit(result.stdout, "\n", { plain = true, triempty = true }) do + line = line:gsub("/$", "") + ret[line] = true + end + end + return ret +end + +local new_git_status = function() + return setmetatable({}, { + __index = function(self, key) + local ignore_proc = vim.system( + { "git", "ls-files", "--ignored", "--exclude-standard", "--others", "--directory" }, + { + cwd = key, + text = true, + } + ) + local tracked_proc = vim.system({ "git", "ls-tree", "HEAD", "--name-only" }, { + cwd = key, + text = true, + }) + local ret = { + ignored = parse_output(ignore_proc), + tracked = parse_output(tracked_proc), + } + + rawset(self, key, ret) + return ret + end, + }) +end + +M.git_status = new_git_status() + +local refresh = require("oil.actions").refresh +local orig_refresh = refresh.callback +refresh.callback = function(...) + M.git_status = new_git_status() + orig_refresh(...) +end + +return M