aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--plugins/select_colorscheme.lua128
2 files changed, 129 insertions, 0 deletions
diff --git a/README.md b/README.md
index cd0347e..004fde3 100644
--- a/README.md
+++ b/README.md
@@ -126,6 +126,7 @@ to something other than a raw file it should be marked with an asterisk.*
| [`regexreplacepreview`](plugins/regexreplacepreview.lua?raw=1) | Allows for you to write a regex and its replacement in one go, and live preview the results. |
| [`restoretabs`](plugins/restoretabs.lua?raw=1) | Keep a list of recently closed tabs, and restore the tab in order on cntrl+shift+t. |
| [`scalestatus`](plugins/scalestatus.lua?raw=1) | Displays current scale (zoom) in status view (depends on scale plugin) |
+| [`select_colorscheme`](plugins/select_colorscheme.lua?raw=1) | Select a color theme, like VScode, Sublime Text.(plugin saves changes) |
| [`selectionhighlight`](plugins/selectionhighlight.lua?raw=1) | Highlights regions of code that match the current selection *([screenshot](https://user-images.githubusercontent.com/3920290/80710883-5f597c80-8ae7-11ea-97f0-76dfacc08439.png))* |
| [`smallclock`](plugins/smallclock.lua?raw=1) | Displays the current time in the corner of the status view |
| [`smoothcaret`](plugins/smoothcaret.lua?raw=1) | Smooth caret animation *([gif](https://user-images.githubusercontent.com/20792268/139006049-a0ba6559-88cb-49a7-8077-4822445b4a1f.gif))* |
diff --git a/plugins/select_colorscheme.lua b/plugins/select_colorscheme.lua
new file mode 100644
index 0000000..f20d949
--- /dev/null
+++ b/plugins/select_colorscheme.lua
@@ -0,0 +1,128 @@
+-- mod-version:2 -- lite-xl 2.0
+local core = require "core"
+local command = require "core.command"
+local common = require "core.common"
+local style = require "core.style"
+local CommandView = require "core.commandview"
+
+-- ----------------------------------------------------------------
+local PATH_CONFIG = USERDIR .. "/color_settings.lua"
+
+local Settings = {}
+Settings.color_scheme = ""
+Settings.color_list = {}
+local color_default = {name = "Default", module = "core.style"}
+local plugin_enable = false
+
+-- =========================Proxy method==========================
+local move_suggestion_idx = CommandView.move_suggestion_idx
+
+function CommandView:move_suggestion_idx(dir)
+ move_suggestion_idx(self, dir)
+ if plugin_enable then
+ local color_name = self.suggestions[self.suggestion_idx].text
+ Settings:change_color(color_name)
+ end
+end
+
+local on_quit_project = core.on_quit_project
+
+function core.on_quit_project()
+ Settings:save_settings()
+ on_quit_project()
+end
+-- ----------------------------------------------------------------
+
+function Settings:get_color_list()
+ return self.color_list
+end
+
+function Settings:init()
+ self:load_settings()
+ self:make_color_list()
+end
+
+function Settings:make_color_list()
+ for _, root_dir in ipairs {DATADIR, USERDIR} do
+ local plugin_dir = root_dir .. "/colors"
+ for _, filename in ipairs(system.list_dir(plugin_dir) or {}) do
+ table.insert(self.color_list, filename:match("(.-)%.lua$"))
+ end
+ end
+ table.insert(self.color_list, color_default.name)
+end
+
+function Settings:is_change_color(color_name)
+ return not (self.color_scheme == color_name)
+end
+
+function Settings:get_color_scheme()
+ return (self.color_scheme == "") and color_default.name or self.color_scheme
+end
+
+local function make_color_module_name(name)
+ return (name == color_default.name) and color_default.module or "colors."..name
+end
+
+function Settings:change_color(name)
+ if self:is_change_color(name) then
+ core.reload_module(make_color_module_name(name))
+ self.color_scheme = name
+ end
+end
+
+function Settings:save_settings()
+ local fp = io.open(PATH_CONFIG, "w")
+ if fp then
+ fp:write(self.color_scheme)
+ fp:close()
+ end
+end
+
+function Settings:load_settings()
+ local fp = io.open(PATH_CONFIG, "r")
+ if fp then
+ local name = fp:read("*a")
+ core.reload_module(make_color_module_name(name))
+ Settings.color_scheme = name
+ fp:close()
+ end
+end
+
+-- -------------------------------Utility--------------------------
+local function table_remove_value(list, value)
+ for i=1, #list do
+ if list[i] == value then
+ table.remove(list, i)
+ break
+ end
+ end
+end
+-- ----------------------------------------------------------------
+local function normalize_color_list(list)
+ table_remove_value(list, Settings:get_color_scheme())
+ table.sort(list, function(a, b) return string.lower(a) > string.lower(b) end)
+ return {Settings:get_color_scheme(), table.unpack(list)}
+end
+-- =========================Add Commands==========================
+local color_scheme_submit = function(text, item)
+ if item then
+ Settings:change_color(item.text)
+ plugin_enable = false
+ end
+end
+
+local color_scheme_suggest = function(text)
+ plugin_enable = true
+ local res_list = common.fuzzy_match(Settings:get_color_list(), text)
+ return normalize_color_list(res_list)
+end
+
+command.add(nil, {
+ ["ui:color scheme"] = function()
+ core.command_view:enter("Select color scheme", color_scheme_submit, color_scheme_suggest)
+ end,
+ })
+-- ----------------------------------------------------------------
+
+Settings:init()