diff options
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | plugins/select_colorscheme.lua | 128 |
2 files changed, 129 insertions, 0 deletions
@@ -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() |