aboutsummaryrefslogtreecommitdiff
-- mod-version:3
local core = require "core"

-- Load a specific theme when the filename of an active document does match
-- a pattern.

-- usage:
-- require("plugins.themeselect").add_pattern("%.md$", "summer")

local theme_select = {}

local saved_colors_module = "core.style"

local themes_patterns = {}

local reload_module = core.reload_module
local set_visited = core.set_visited

function core.reload_module(name)
  if name:match("^colors%.") then
    saved_colors_module = name
  end
  reload_module(name)
end

function core.set_visited(filename)
  set_visited(filename)
  for _, select in ipairs(themes_patterns) do
    if filename:match(select.pattern) then
      reload_module("colors." .. select.theme)
      return
    end
  end
  if saved_colors_module then
    reload_module(saved_colors_module)
  end
end

function theme_select.add_pattern(pattern, theme)
  table.insert(themes_patterns, {pattern = pattern, theme = theme})
end

function theme_select.clear_patterns()
  themes_patterns = {}
end

return theme_select