aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/gitstatus.lua39
1 files changed, 19 insertions, 20 deletions
diff --git a/plugins/gitstatus.lua b/plugins/gitstatus.lua
index 4de2267..bb1882c 100644
--- a/plugins/gitstatus.lua
+++ b/plugins/gitstatus.lua
@@ -3,16 +3,18 @@ local core = require "core"
local common = require "core.common"
local config = require "core.config"
local style = require "core.style"
-local _, TreeView = pcall(require, "plugins.treeview")
local StatusView = require "core.statusview"
+local TreeView = require "plugins.treeview"
+
local scan_rate = config.project_scan_rate or 5
+local cached_color_for_item = {}
-if TreeView then
- if not (TreeView["set_color_override"] and TreeView["clear_all_color_overrides"]) then
- -- TreeView doesn't have the color override feature we rely on, so skip it.
- TreeView = nil
- end
+-- Override TreeView's color_for_item, but first
+-- stash the old one (using [] in case it is not there at all)
+local old_color_for_item = TreeView["color_for_item"]
+function TreeView:color_for_item(abs_path)
+ return cached_color_for_item[abs_path] or old_color_for_item(abs_path)
end
@@ -60,29 +62,26 @@ core.add_thread(function()
diff = diff .. diff2
end
- if TreeView then
- TreeView:clear_all_color_overrides()
- end
+ -- forget the old state
+ cached_color_for_item = {}
- local root = ""
+ local folder = core.project_dir
for line in string.gmatch(diff, "[^\n]+") do
local submodule = line:match("^Entering '(.+)'$")
if submodule then
- root = submodule.."/"
+ folder = core.project_dir .. PATHSEP .. submodule
else
local ins, dels, path = line:match("(%d+)%s+(%d+)%s+(.+)")
if path then
inserts = inserts + (tonumber(ins) or 0)
deletes = deletes + (tonumber(dels) or 0)
- local abs_path = core.project_dir.."/"..root..path
- if TreeView then
- -- Color this file, and each parent folder,
- -- so you can see at a glance which folders
- -- have modified files in them.
- while abs_path do
- TreeView:set_color_override(abs_path, style.gitstatus_modification)
- abs_path = common.dirname(abs_path)
- end
+ local abs_path = folder .. PATHSEP .. path
+ -- Color this file, and each parent folder,
+ -- so you can see at a glance which folders
+ -- have modified files in them.
+ while abs_path do
+ cached_color_for_item[abs_path] = style.gitstatus_modification
+ abs_path = common.dirname(abs_path)
end
end
end