diff --git a/lua/jsonfly/cache.lua b/lua/jsonfly/cache.lua new file mode 100644 index 0000000..42551de --- /dev/null +++ b/lua/jsonfly/cache.lua @@ -0,0 +1,47 @@ +local M = {}; + +local _cache = {}; + +---@param buffer integer +function M:cache_buffer(buffer, value) + _cache[buffer] = value; +end + +---@param buffer integer +function M:invalidate_buffer(buffer) + _cache[buffer] = nil; +end + +---@param buffer integer +---@return string[]|nil +function M:get_cache(buffer) + return _cache[buffer]; +end + +local _listening_buffers = {}; + +---@param buffer integer +function M:register_listeners(buffer) + if _listening_buffers[buffer] then + return; + end + + _listening_buffers[buffer] = true; + + vim.api.nvim_buf_attach( + buffer, + false, + { + on_lines = function() + self:invalidate_buffer(buffer) + end, + on_detach = function() + self:invalidate_buffer(buffer) + _listening_buffers[buffer] = nil; + end, + } + ); +end + +return M; + diff --git a/lua/telescope/_extensions/jsonfly.lua b/lua/telescope/_extensions/jsonfly.lua index 77715b2..b3b7e2b 100644 --- a/lua/telescope/_extensions/jsonfly.lua +++ b/lua/telescope/_extensions/jsonfly.lua @@ -137,11 +137,12 @@ return require"telescope".register_extension { local cached_entries = cache:get_cache(current_buf) if cached_entries ~= nil then - print("Using cached entries") show_picker(cached_entries, current_buf) return end + cache:register_listeners(current_buf) + local content_lines = vim.api.nvim_buf_get_lines(current_buf, 0, -1, false) local content = table.concat(content_lines, "\n")