From 9908e129a6f4fa246e178559d835759e3c916623 Mon Sep 17 00:00:00 2001 From: George Sokianos Date: Tue, 11 Jan 2022 19:59:12 +0000 Subject: [PATCH] Added addons folder with plugins and color schemes --- release_files/README_OS4.md.info | Bin 5092 -> 5092 bytes release_files/addons.info | Bin 0 -> 11420 bytes release_files/addons/colors.info | Bin 0 -> 11420 bytes release_files/addons/colors/dark.info | Bin 0 -> 11420 bytes .../addons/colors/dark/cold_lime.lua | 28 ++ release_files/addons/colors/dark/dracula.lua | 28 ++ release_files/addons/colors/dark/duorand.lua | 37 ++ release_files/addons/colors/dark/duotone.lua | 29 ++ .../addons/colors/dark/gruvbox_dark.lua | 28 ++ release_files/addons/colors/dark/liqube.lua | 32 ++ release_files/addons/colors/dark/mariana.lua | 28 ++ release_files/addons/colors/dark/monodark.lua | 29 ++ .../colors/dark/monokai-pro-classic.lua | 28 ++ release_files/addons/colors/dark/monokai.lua | 28 ++ release_files/addons/colors/dark/nord.lua | 39 ++ release_files/addons/colors/dark/onedark.lua | 29 ++ .../addons/colors/dark/only_dark.lua | 31 ++ .../addons/colors/dark/vscode-dark.lua | 37 ++ release_files/addons/colors/dark/winter.lua | 28 ++ release_files/addons/colors/dark/zenburn.lua | 28 ++ release_files/addons/colors/light.info | Bin 0 -> 11420 bytes release_files/addons/colors/light/github.lua | 31 ++ release_files/addons/colors/light/moe.lua | 28 ++ .../addons/colors/light/solarized_light.lua | 28 ++ .../addons/colors/light/solarobj.lua | 28 ++ release_files/addons/plugins.info | Bin 0 -> 11420 bytes release_files/addons/plugins/autoinsert.lua | 115 ++++++ release_files/addons/plugins/autowrap.lua | 36 ++ release_files/addons/plugins/bigclock.lua | 73 ++++ release_files/addons/plugins/bracketmatch.lua | 118 ++++++ release_files/addons/plugins/colorpreview.lua | 54 +++ release_files/addons/plugins/eofnewline.lua | 29 ++ .../addons/plugins/ephemeraldocviews.lua | 45 +++ release_files/addons/plugins/ghmarkdown.lua | 78 ++++ .../addons/plugins/hidelinenumbers.lua | 6 + release_files/addons/plugins/indentguide.lua | 50 +++ .../addons/plugins/language_make.lua | 18 + release_files/addons/plugins/language_sh.lua | 43 +++ release_files/addons/plugins/lfautoinsert.lua | 108 ++++++ release_files/addons/plugins/markers.lua | 104 +++++ release_files/addons/plugins/memoryusage.lua | 19 + release_files/addons/plugins/minimap.lua | 299 +++++++++++++++ release_files/addons/plugins/motiontrail.lua | 47 +++ release_files/addons/plugins/navigate.lua | 170 +++++++++ release_files/addons/plugins/rainbowparen.lua | 59 +++ release_files/addons/plugins/restoretabs.lua | 55 +++ .../addons/plugins/selectionhighlight.lua | 42 +++ .../addons/plugins/todotreeview-xl.lua | 356 ++++++++++++++++++ release_files/lite.info | Bin 13904 -> 13904 bytes 49 files changed, 2526 insertions(+) create mode 100644 release_files/addons.info create mode 100644 release_files/addons/colors.info create mode 100644 release_files/addons/colors/dark.info create mode 100755 release_files/addons/colors/dark/cold_lime.lua create mode 100644 release_files/addons/colors/dark/dracula.lua create mode 100755 release_files/addons/colors/dark/duorand.lua create mode 100755 release_files/addons/colors/dark/duotone.lua create mode 100755 release_files/addons/colors/dark/gruvbox_dark.lua create mode 100755 release_files/addons/colors/dark/liqube.lua create mode 100755 release_files/addons/colors/dark/mariana.lua create mode 100755 release_files/addons/colors/dark/monodark.lua create mode 100755 release_files/addons/colors/dark/monokai-pro-classic.lua create mode 100755 release_files/addons/colors/dark/monokai.lua create mode 100755 release_files/addons/colors/dark/nord.lua create mode 100755 release_files/addons/colors/dark/onedark.lua create mode 100755 release_files/addons/colors/dark/only_dark.lua create mode 100755 release_files/addons/colors/dark/vscode-dark.lua create mode 100755 release_files/addons/colors/dark/winter.lua create mode 100755 release_files/addons/colors/dark/zenburn.lua create mode 100644 release_files/addons/colors/light.info create mode 100755 release_files/addons/colors/light/github.lua create mode 100755 release_files/addons/colors/light/moe.lua create mode 100755 release_files/addons/colors/light/solarized_light.lua create mode 100755 release_files/addons/colors/light/solarobj.lua create mode 100644 release_files/addons/plugins.info create mode 100755 release_files/addons/plugins/autoinsert.lua create mode 100755 release_files/addons/plugins/autowrap.lua create mode 100755 release_files/addons/plugins/bigclock.lua create mode 100755 release_files/addons/plugins/bracketmatch.lua create mode 100755 release_files/addons/plugins/colorpreview.lua create mode 100644 release_files/addons/plugins/eofnewline.lua create mode 100755 release_files/addons/plugins/ephemeraldocviews.lua create mode 100644 release_files/addons/plugins/ghmarkdown.lua create mode 100755 release_files/addons/plugins/hidelinenumbers.lua create mode 100755 release_files/addons/plugins/indentguide.lua create mode 100755 release_files/addons/plugins/language_make.lua create mode 100755 release_files/addons/plugins/language_sh.lua create mode 100755 release_files/addons/plugins/lfautoinsert.lua create mode 100755 release_files/addons/plugins/markers.lua create mode 100755 release_files/addons/plugins/memoryusage.lua create mode 100755 release_files/addons/plugins/minimap.lua create mode 100755 release_files/addons/plugins/motiontrail.lua create mode 100755 release_files/addons/plugins/navigate.lua create mode 100755 release_files/addons/plugins/rainbowparen.lua create mode 100755 release_files/addons/plugins/restoretabs.lua create mode 100755 release_files/addons/plugins/selectionhighlight.lua create mode 100644 release_files/addons/plugins/todotreeview-xl.lua diff --git a/release_files/README_OS4.md.info b/release_files/README_OS4.md.info index dc4ea107f6e4f2c6b553b8f24bddd4723200b98c..cfcd26717d717d0f454ae05c52ed21c531712eb4 100644 GIT binary patch delta 16 XcmaE&{zQF(E$dkZ1_qXmPK$&AG{*&E delta 16 XcmaE&{zQF(E$bNu1_s@YPK$&AHH!s` diff --git a/release_files/addons.info b/release_files/addons.info new file mode 100644 index 0000000000000000000000000000000000000000..915e582c46b1fb9cee2c5d0dfb9c4b460e108999 GIT binary patch literal 11420 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 H5#Zkdj*vUE literal 0 HcmV?d00001 diff --git a/release_files/addons/colors.info b/release_files/addons/colors.info new file mode 100644 index 0000000000000000000000000000000000000000..f724b2ab4564bb4d0fcec116bb9929ae480934ba GIT binary patch literal 11420 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 HjR5}!&lftO literal 0 HcmV?d00001 diff --git a/release_files/addons/colors/dark.info b/release_files/addons/colors/dark.info new file mode 100644 index 0000000000000000000000000000000000000000..63900150b8587958091602c8d5e747c32630cf46 GIT binary patch literal 11420 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 + +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#13171e" } +style.background2 = { common.color "#21252b" } +style.background3 = { common.color "#21252b" } +style.text = { common.color "#abb2bf" } +style.caret = { common.color "#abb2bf" } +style.accent = { common.color "#ffffff" } +style.dim = { common.color "#545e70" } +style.divider = { common.color "#242223" } +style.selection = { common.color "#3e4451" } +style.line_number = { common.color "#323641" } +style.line_number2 = { common.color "#596275" } +style.line_highlight = { common.color "#1c1f25" } +style.scrollbar = { common.color "#3d3f43" } +style.scrollbar2 = { common.color "#595b5f" } +style.guide = { common.color "#1c1f25" } -- indentguide + +style.syntax["normal"] = { common.color "#abb2bf" } +style.syntax["symbol"] = { common.color "#71a9d7" } +style.syntax["comment"] = { common.color "#5c6370" } +style.syntax["keyword"] = { common.color "#98c875" } +style.syntax["keyword2"] = { common.color "#ffffff" } +style.syntax["number"] = { common.color "#ffffff" } +style.syntax["literal"] = { common.color "#ea5964" } +style.syntax["string"] = { common.color "#ea5964" } +style.syntax["operator"] = { common.color "#657085" } +style.syntax["function"] = { common.color "#ffffff" } +style.syntax["preprocessor"] = { common.color "#98c875" } -- thinking ahead diff --git a/release_files/addons/colors/dark/mariana.lua b/release_files/addons/colors/dark/mariana.lua new file mode 100755 index 00000000..adea00f1 --- /dev/null +++ b/release_files/addons/colors/dark/mariana.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#303841" } +style.background2 = { common.color "#1d2227" } +style.background3 = { common.color "#1d2227" } +style.text = { common.color "#9ea191" } +style.caret = { common.color "#61efce" } +style.accent = { common.color "#ffd152" } +style.dim = { common.color "#4c5863" } +style.divider = { common.color "#242223" } +style.selection = { common.color "#4c5863" } +style.line_number = { common.color "#bfc5d0" } +style.line_number2 = { common.color "#848b95" } +style.line_highlight = { common.color "#303841" } +style.scrollbar = { common.color "#696f75" } +style.scrollbar2 = { common.color "#444b53" } + +style.syntax["normal"] = { common.color "#d7dde9" } +style.syntax["symbol"] = { common.color "#d8dee9" } +style.syntax["comment"] = { common.color "#a6acb9" } +style.syntax["keyword"] = { common.color "#e55e66" } +style.syntax["keyword2"] = { common.color "#ef6179" } +style.syntax["number"] = { common.color "#ffd152" } +style.syntax["literal"] = { common.color "#e75550" } +style.syntax["string"] = { common.color "#939d5d" } +style.syntax["operator"] = { common.color "#c2674f" } +style.syntax["function"] = { common.color "#6699ca" } \ No newline at end of file diff --git a/release_files/addons/colors/dark/monodark.lua b/release_files/addons/colors/dark/monodark.lua new file mode 100755 index 00000000..a61f5667 --- /dev/null +++ b/release_files/addons/colors/dark/monodark.lua @@ -0,0 +1,29 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#080808" } +style.background2 = { common.color "#080808" } +style.background3 = { common.color "#101010" } +style.text = { common.color "#707070" } +style.caret = { common.color "#ffffff" } +style.accent = { common.color "#d0d0d0" } +style.dim = { common.color "#303030" } +style.divider = { common.color "#080808" } +style.selection = { common.color "#242424" } +style.line_number = { common.color "#202020" } +style.line_number2 = { common.color "#707070" } +style.line_highlight = { common.color "#101010" } +style.scrollbar = { common.color "#252525" } +style.scrollbar2 = { common.color "#303030" } + +style.syntax = {} +style.syntax["normal"] = { common.color "#a0a0a0" } +style.syntax["symbol"] = { common.color "#a0a0a0" } +style.syntax["comment"] = { common.color "#404040" } +style.syntax["keyword"] = { common.color "#f0f0f0" } +style.syntax["keyword2"] = { common.color "#f0f0f0" } +style.syntax["number"] = { common.color "#f0f0f0" } +style.syntax["literal"] = { common.color "#f0f0f0" } +style.syntax["string"] = { common.color "#f0f0f0" } +style.syntax["operator"] = { common.color "#f0f0f0" } +style.syntax["function"] = { common.color "#a0a0a0" } diff --git a/release_files/addons/colors/dark/monokai-pro-classic.lua b/release_files/addons/colors/dark/monokai-pro-classic.lua new file mode 100755 index 00000000..96446c8c --- /dev/null +++ b/release_files/addons/colors/dark/monokai-pro-classic.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#272822" } +style.background2 = { common.color "#22231C" } +style.background3 = { common.color "#22231C" } +style.text = { common.color "#9ea191" } +style.caret = { common.color "#F8F8F0" } +style.accent = { common.color "#F8F8F2" } +style.dim = { common.color "#5e6052" } +style.divider = { common.color "#1b1c17" } +style.selection = { common.color "#49483E" } +style.line_number = { common.color "#75715E" } +style.line_number2 = { common.color "#d2d0c6" } +style.line_highlight = { common.color "#36372f" } +style.scrollbar = { common.color "#49483E" } +style.scrollbar2 = { common.color "#636254" } + +style.syntax["normal"] = { common.color "#F8F8F2" } +style.syntax["symbol"] = { common.color "#F8F8F2" } +style.syntax["comment"] = { common.color "#75715E" } +style.syntax["keyword"] = { common.color "#F92672" } +style.syntax["keyword2"] = { common.color "#66DAEF" } +style.syntax["number"] = { common.color "#AE81FF" } +style.syntax["literal"] = { common.color "#AE81FF" } +style.syntax["string"] = { common.color "#E6DB74" } +style.syntax["operator"] = { common.color "#F8F8F2" } +style.syntax["function"] = { common.color "#A6E22E" } diff --git a/release_files/addons/colors/dark/monokai.lua b/release_files/addons/colors/dark/monokai.lua new file mode 100755 index 00000000..bbd8d47a --- /dev/null +++ b/release_files/addons/colors/dark/monokai.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#282923" } +style.background2 = { common.color "#181915" } +style.background3 = { common.color "#181915" } +style.text = { common.color "#9ea191" } +style.caret = { common.color "#f8f8f2" } +style.accent = { common.color "#f8f8f2" } +style.dim = { common.color "#5e6052" } +style.divider = { common.color "#1b1c17" } +style.selection = { common.color "#3a3a32" } +style.line_number = { common.color "#90918b" } +style.line_number2 = { common.color "#d2d0c6" } +style.line_highlight = { common.color "#282923" } +style.scrollbar = { common.color "#63635f" } +style.scrollbar2 = { common.color "#3d3d38" } + +style.syntax["normal"] = { common.color "#f8f8f2" } +style.syntax["symbol"] = { common.color "#f8f8f2" } +style.syntax["comment"] = { common.color "#75715E" } +style.syntax["keyword"] = { common.color "#f92472" } +style.syntax["keyword2"] = { common.color "#f92472" } +style.syntax["number"] = { common.color "#ac80ff" } +style.syntax["literal"] = { common.color "#e7db74" } +style.syntax["string"] = { common.color "#e7db74" } +style.syntax["operator"] = { common.color "#f92472" } +style.syntax["function"] = { common.color "#5cd5ef" } diff --git a/release_files/addons/colors/dark/nord.lua b/release_files/addons/colors/dark/nord.lua new file mode 100755 index 00000000..e289de6b --- /dev/null +++ b/release_files/addons/colors/dark/nord.lua @@ -0,0 +1,39 @@ +local style = require "core.style" +local common = require "core.common" +local config = require "core.config" + +style.background = { common.color "#2E3440" } +style.background2 = { common.color "#2E3440" } +style.background3 = { common.color "#3B4252" } +style.text = { common.color "#D8DEE9" } +style.caret = { common.color "#D8DEE9" } +style.accent = { common.color "#88C0D0" } +style.dim = { common.color "#d8dee966" } +style.divider = { common.color "#3B4252" } +style.selection = { common.color "#434C5ECC" } +style.line_number = { common.color "#4C566A" } +style.line_number2 = { common.color "#D8DEE9" } +style.line_highlight = { common.color "#3B4252" } +style.scrollbar = { common.color "#434c5eaa" } +style.scrollbar2 = { common.color "#434c5e" } +style.good = { common.color "#72b886cc" } +style.warn = { common.color "#d08770" } +style.error = { common.color "#bf616a" } +style.modified = { common.color "#ebcb8b" } + +style.syntax["normal"] = { common.color "#ECEFF4" } +style.syntax["symbol"] = { common.color "#D8DEE9" } +style.syntax["comment"] = { common.color "#616E88" } +style.syntax["keyword"] = { common.color "#81A1C1" } +style.syntax["keyword2"] = { common.color "#81A1C1" } +style.syntax["number"] = { common.color "#B48EAD" } +style.syntax["literal"] = { common.color "#81A1C1" } +style.syntax["string"] = { common.color "#A3BE8C" } +style.syntax["operator"] = { common.color "#81A1C1" } +style.syntax["function"] = { common.color "#88C0D0" } + +config.highlight_current_line = "no_selection" + +style.guide = { common.color "#434c5eb3" } +style.bracketmatch_color = { common.color "#8fbcbb" } + diff --git a/release_files/addons/colors/dark/onedark.lua b/release_files/addons/colors/dark/onedark.lua new file mode 100755 index 00000000..323613ed --- /dev/null +++ b/release_files/addons/colors/dark/onedark.lua @@ -0,0 +1,29 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#282c34" } +style.background2 = { common.color "#21252B" } +style.background3 = { common.color "#21252B" } +style.text = { common.color "#abb2bf" } +style.caret = { common.color "#528bff" } +style.accent = { common.color "#ffffff" } +style.dim = { common.color "#4f5873" } +style.divider = { common.color "#181A1F" } +style.selection = { common.color "#383D49" } +style.line_number = { common.color "#53576e" } +style.line_number2 = { common.color "#666B76" } +style.line_highlight = { common.color "#2C333E" } +style.scrollbar = { common.color "#4f5873" } +style.scrollbar2 = { common.color "#3060C1" } + +style.syntax["normal"] = { common.color "#abb2bf" } +style.syntax["symbol"] = { common.color "#abb2bf" } +style.syntax["comment"] = { common.color "#5f697a" } +style.syntax["keyword"] = { common.color "#cd74e8" } +style.syntax["keyword2"] = { common.color "#eb6772" } +style.syntax["number"] = { common.color "#db9d63" } +style.syntax["literal"] = { common.color "#e6c07b" } +style.syntax["string"] = { common.color "#9acc76" } +style.syntax["operator"] = { common.color "#abb2bf" } +style.syntax["function"] = { common.color "#5cb3fa" } + diff --git a/release_files/addons/colors/dark/only_dark.lua b/release_files/addons/colors/dark/only_dark.lua new file mode 100755 index 00000000..2c29e9d9 --- /dev/null +++ b/release_files/addons/colors/dark/only_dark.lua @@ -0,0 +1,31 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#242424" } +style.background2 = { common.color "#252528" } +style.background3 = { common.color "#44475A" } + +style.text = { common.color "#fffff0" } +style.caret = { common.color "#69FF94" } +style.accent = { common.color "#ff0fff" } + +style.dim = { common.color "#0fffff" } +style.divider = { common.color "#7b7f8b" } +style.selection = { common.color "#48484f" } +style.selectionhighlight = { common.color "#dddeee" } +style.line_number = { common.color "#525259" } +style.line_number2 = { common.color "#f6f6e0" } +style.line_highlight = { common.color "#343438" } +style.scrollbar = { common.color "#414146" } +style.scrollbar2 = { common.color "#4b4bff" } + +style.syntax["normal"] = { common.color "#e1e1e6" } +style.syntax["symbol"] = { common.color "#97e1f1" } +style.syntax["comment"] = { common.color "#676b6f" } +style.syntax["keyword"] = { common.color "#E58AC9" } +style.syntax["keyword2"] = { common.color "#F77483" } +style.syntax["number"] = { common.color "#FFA94D" } +style.syntax["literal"] = { common.color "#ee6666" } +style.syntax["string"] = { common.color "#f7c95c" } +style.syntax["operator"] = { common.color "#93DDFA" } +style.syntax["function"] = { common.color "#bf9eee" } diff --git a/release_files/addons/colors/dark/vscode-dark.lua b/release_files/addons/colors/dark/vscode-dark.lua new file mode 100755 index 00000000..0b8d1084 --- /dev/null +++ b/release_files/addons/colors/dark/vscode-dark.lua @@ -0,0 +1,37 @@ +-- Most of the colors are taken from: +-- https://github.com/microsoft/vscode/tree/master/extensions/theme-defaults/themes + +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#1E1E1E" } +style.background2 = { common.color "#252526" } +style.background3 = { common.color "#252526" } +style.text = { common.color "#D4D4D4" } +style.caret = { common.color "#FFFFFF" } +style.accent = { common.color "#76BCFF" } -- Text in autocomplete and command, col(>80) in satusbar +style.dim = { common.color "#7A7A7A" } -- Text of nonactive tabs, prefix in log +style.divider = { common.color "#1E1E1E" } +style.selection = { common.color "#264F78" } +style.line_number = { common.color "#707070" } +style.line_number2 = { common.color "#A0A0A0" } -- Number on line with caret +style.line_highlight = { common.color "#333A40"} +style.scrollbar = { common.color "#404040" } +style.scrollbar2 = { common.color "#707070" } -- Hovered + +style.syntax["normal"] = { common.color "#D4D4D4" } +style.syntax["symbol"] = { common.color "#D4D4D4" } +style.syntax["comment"] = { common.color "#6A9955" } +style.syntax["keyword"] = { common.color "#569CD6" } -- local function end, if case +style.syntax["keyword2"] = { common.color "#C586C0" } -- self, int float +style.syntax["number"] = { common.color "#B5CEA8" } +style.syntax["literal"] = { common.color "#569CD6" } +style.syntax["string"] = { common.color "#CE9178" } +style.syntax["operator"] = { common.color "#8590A5"} -- = + - / < > +style.syntax["function"] = { common.color "#DCDCAA" } + +-- PLUGINS +style.linter_warning = { common.color "#B89500" } -- linter +style.bracketmatch_color = { common.color "#76BCFF" } -- bracketmatch +style.guide = { common.color "#404040" } -- indentguide +style.guide_width = 1 -- indentguide diff --git a/release_files/addons/colors/dark/winter.lua b/release_files/addons/colors/dark/winter.lua new file mode 100755 index 00000000..35fb408e --- /dev/null +++ b/release_files/addons/colors/dark/winter.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#282a36" } +style.background2 = { common.color "#22242e" } +style.background3 = { common.color "#22242e" } +style.text = { common.color "#aab3e6" } +style.caret = { common.color "#f5faff" } +style.accent = { common.color "#ffb86c" } +style.dim = { common.color "#4f526b" } +style.divider = { common.color "#22242e" } +style.selection = { common.color "#4c5163" } +style.line_number = { common.color "#44475a" } +style.line_number2 = { common.color "#717796" } +style.line_highlight = { common.color "#2d303d" } +style.scrollbar = { common.color "#44475a" } +style.scrollbar2 = { common.color "#4c5163" } + +style.syntax["normal"] = { common.color "#f5faff" } +style.syntax["symbol"] = { common.color "#f5faff" } +style.syntax["comment"] = { common.color "#6272a4" } +style.syntax["keyword"] = { common.color "#ff79c6" } +style.syntax["keyword2"] = { common.color "#8be9fd" } +style.syntax["number"] = { common.color "#bd93f9" } +style.syntax["literal"] = { common.color "#bd93f9" } +style.syntax["string"] = { common.color "#f1fa8c" } +style.syntax["operator"] = { common.color "#ff79c6" } +style.syntax["function"] = { common.color "#8be9fd" } diff --git a/release_files/addons/colors/dark/zenburn.lua b/release_files/addons/colors/dark/zenburn.lua new file mode 100755 index 00000000..c69b8955 --- /dev/null +++ b/release_files/addons/colors/dark/zenburn.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#404040" } +style.background2 = { common.color "#3d3d3d" } +style.background3 = { common.color "#2b2b2b" } +style.text = { common.color "#dcdccc" } +style.caret = { common.color "#f8f8f0" } +style.accent = { common.color "#dcdccc" } +style.dim = { common.color "#8f8f8f" } +style.divider = { common.color "#383838" } +style.selection = { common.color "#2f2f2f" } +style.line_number = { common.color "#545454" } +style.line_number2 = { common.color "#545454" } +style.line_highlight = { common.color "#383838" } +style.scrollbar = { common.color "#4c4c4c" } +style.scrollbar2 = { common.color "#5e5e5e" } + +style.syntax["normal"] = { common.color "#dcdccc" } +style.syntax["symbol"] = { common.color "#dcdccc" } +style.syntax["comment"] = { common.color "#7f9f7f" } +style.syntax["keyword"] = { common.color "#f0dfaf" } +style.syntax["keyword2"] = { common.color "#dfdfbf" } +style.syntax["number"] = { common.color "#8cd0d3" } +style.syntax["literal"] = { common.color "#dfaf8f" } +style.syntax["string"] = { common.color "#cc9393" } +style.syntax["operator"] = { common.color "#f0efd0" } +style.syntax["function"] = { common.color "#efef8f" } diff --git a/release_files/addons/colors/light.info b/release_files/addons/colors/light.info new file mode 100644 index 0000000000000000000000000000000000000000..269f33288a9b49fbdf98b64a8c65886dd2cc5d26 GIT binary patch literal 11420 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 F{|4`6Jj(z8 literal 0 HcmV?d00001 diff --git a/release_files/addons/colors/light/github.lua b/release_files/addons/colors/light/github.lua new file mode 100755 index 00000000..c2ba66c6 --- /dev/null +++ b/release_files/addons/colors/light/github.lua @@ -0,0 +1,31 @@ +local style = require "core.style" +local common = require "core.common" + +-- GitHubs style varies from language to language so its hard to get perfect +-- Originally written by thebirk, 2019 + +style.background = { common.color "#fbfbfb" } +style.background2 = { common.color "#f2f2f2" } +style.background3 = { common.color "#f2f2f2" } +style.text = { common.color "#404040" } +style.caret = { common.color "#181818" } +style.accent = { common.color "#0366d6" } +style.dim = { common.color "#b0b0b0" } +style.divider = { common.color "#e8e8e8" } +style.selection = { common.color "#b7dce8" } +style.line_number = { common.color "#d0d0d0" } +style.line_number2 = { common.color "#808080" } +style.line_highlight = { common.color "#f2f2f2" } +style.scrollbar = { common.color "#e0e0e0" } +style.scrollbar2 = { common.color "#c0c0c0" } + +style.syntax["normal"] = { common.color "#24292e" } +style.syntax["symbol"] = { common.color "#24292e" } +style.syntax["comment"] = { common.color "#6a737d" } +style.syntax["keyword"] = { common.color "#d73a49" } +style.syntax["keyword2"] = { common.color "#d73a49" } +style.syntax["number"] = { common.color "#005cc5" } +style.syntax["literal"] = { common.color "#005cc5" } +style.syntax["string"] = { common.color "#032f62" } +style.syntax["operator"] = { common.color "#d73a49" } +style.syntax["function"] = { common.color "#005cc5" } diff --git a/release_files/addons/colors/light/moe.lua b/release_files/addons/colors/light/moe.lua new file mode 100755 index 00000000..5232aee9 --- /dev/null +++ b/release_files/addons/colors/light/moe.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#f7f9f9" } +style.background2 = { common.color "#f7f9f9" } +style.background3 = { common.color "#f7f9f9" } +style.text = { common.color "#404040" } +style.caret = { common.color "#ff5971" } +style.accent = { common.color "#ff5971" } +style.dim = { common.color "#b0b0b0" } +style.divider = { common.color "#e8e8e8" } +style.selection = { common.color "#fde6eb" } +style.line_number = { common.color "#d0d0d0" } +style.line_number2 = { common.color "#808080" } +style.line_highlight = { common.color "#f2f2f2" } +style.scrollbar = { common.color "#e0e0e0" } +style.scrollbar2 = { common.color "#c0c0c0" } + +style.syntax["normal"] = { common.color "#181818" } +style.syntax["symbol"] = { common.color "#181818" } +style.syntax["comment"] = { common.color "#43cdbd" } +style.syntax["keyword"] = { common.color "#5f7dcd" } +style.syntax["keyword2"] = { common.color "#9c53c6" } +style.syntax["number"] = { common.color "#3daee9" } +style.syntax["literal"] = { common.color "#3daee9" } +style.syntax["string"] = { common.color "#3daee9" } +style.syntax["operator"] = { common.color "#5f7dcd" } +style.syntax["function"] = { common.color "#9c53c6" } diff --git a/release_files/addons/colors/light/solarized_light.lua b/release_files/addons/colors/light/solarized_light.lua new file mode 100755 index 00000000..8f604e4f --- /dev/null +++ b/release_files/addons/colors/light/solarized_light.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#fdf6e3" } +style.background2 = { common.color "#eee8d5" } +style.background3 = { common.color "#eee8d5" } +style.text = { common.color "#657b83" } +style.caret = { common.color "#657b83" } +style.accent = { common.color "#002b36" } +style.dim = { common.color "#93a1a1" } +style.divider = { common.color "#e0dbc8" } +style.selection = { common.color "#eee8d5" } +style.line_number = { common.color "#93a1a1" } +style.line_number2 = { common.color "#002b36" } +style.line_highlight = { common.color "#eee8d5" } +style.scrollbar = { common.color "#e0dbc8" } +style.scrollbar2 = { common.color "#bfbbaa" } + +style.syntax["normal"] = { common.color "#657b83" } +style.syntax["symbol"] = { common.color "#657b83" } +style.syntax["comment"] = { common.color "#93a1a1" } +style.syntax["keyword"] = { common.color "#859900" } +style.syntax["keyword2"] = { common.color "#268bd2" } +style.syntax["number"] = { common.color "#d33682" } +style.syntax["literal"] = { common.color "#2aa198" } +style.syntax["string"] = { common.color "#2aa198" } +style.syntax["operator"] = { common.color "#859900" } +style.syntax["function"] = { common.color "#268bd2" } diff --git a/release_files/addons/colors/light/solarobj.lua b/release_files/addons/colors/light/solarobj.lua new file mode 100755 index 00000000..c9ace55d --- /dev/null +++ b/release_files/addons/colors/light/solarobj.lua @@ -0,0 +1,28 @@ +local style = require "core.style" +local common = require "core.common" + +style.background = { common.color "#fdf6e3" } +style.background2 = { common.color "#2e2c29" } +style.background3 = { common.color "#3e3c37" } +style.text = { common.color "#b2ada1" } +style.caret = { common.color "#b2ada1" } +style.accent = { common.color "#6c71c4" } +style.dim = { common.color "#b2ada1" } +style.divider = { common.color "#201f1d" } +style.selection = { common.color "#eee8d5" } +style.line_number = { common.color "#93a1a1" } +style.line_number2 = { common.color "#002b36" } +style.line_highlight = { common.color "#fcefcd" } +style.scrollbar = { common.color "#e0dbc8" } +style.scrollbar2 = { common.color "#9d9988" } + +style.syntax["normal"] = { common.color "#3e3c37" } +style.syntax["symbol"] = { common.color "#4c4f82" } +style.syntax["comment"] = { common.color "#93a1a1" } +style.syntax["keyword"] = { common.color "#d33682" } +style.syntax["keyword2"] = { common.color "#6c71c4" } +style.syntax["number"] = { common.color "#859900" } +style.syntax["literal"] = { common.color "#b58900" } +style.syntax["string"] = { common.color "#cb4b16" } +style.syntax["operator"] = { common.color "#859900" } +style.syntax["function"] = { common.color "#268bd2" } diff --git a/release_files/addons/plugins.info b/release_files/addons/plugins.info new file mode 100644 index 0000000000000000000000000000000000000000..072c0b543d9f2d25914db77e8be368e4387953ae GIT binary patch literal 11420 zcmdUU2UL^IwstTIC}IS~(1RkyLRUHjMFa(@B2`eLgd$yPAb<#{AfSTMQBivDNH5Za zP^I@4B!tjH0wKvw{LXjIJ@@?Uo^#7ucl~>6 z&0xmJ2{2;>&;I%1ugGxduYZGR|L8vxr`s_!0Q{D72Oxdu9K+uv{(kW%|6~}DN~1;q07SOL&I{Y8epY~@40A~Rw0RT?=PH@tYrq>1?p)_@Ac#^JnJOIE($58+P zOh@8B`U#ZY|NpW5Xa3?hX>=q50RM`%jJ3Wx~Zqs0+Ae3L*!ra3A# zobGe842>Wf0%WOqirGd{{M%~|6@Ot zKJNe22Wa#E&H;2q=rQ`=LRuWti5}1Y>lpZ7ko#BtX-vP@^*?r)e5ZJ6%wEiq6ztDNFVl}ksAFat(N{Xq!0UhVxmPEz3@T~=mj?j0Hyqafz;nf&u#Sb z3;j>GlRkn*LA2og9S(mu60HfKc|;=({-`Yf9%=LZrazH3|8D}(qJ~Bwrj6f-Gl%7;fqr-T?pvXK$(N>E67iu0a#Q2!+yili`}7 z=5?A;d;So5vKavINyeJnKaKlYeX~xy{JtMwZhk4d*0I}%4YimLv)i7HJZHq5Ag~QM zdXhQe-Me?s&&LGEKUdSb&UuLa#^u8&^`BX4*a_8@-z~6-!<36v<_{Z>IHaw^)3*6# zx!ylbSuiKRamk0LYzH84gn%^fQAD7612RB!rr&#q?=MgX@s3*~H#^?5aZIKTe4AQ$ z<|rjzb%Nong`{d3|EcB*8yljm&MQ0p(WuTJ6|kz2=B>vEssz%yX#h5q3|#Le0=Ha%iNQ*@Zf{KLZY2R^O0 z4<0>|=Ev(cEu`PWRETJ1&f7P5`q)0~g~YT1lc_l?!w z8&VG#(k7RwmtUBWz4Nlz%isEdPgvn{VKxU|z__W9*1z3#B~FUh#W zq~eBO;6X5r^FCS9#{v1!Zn+;9K~4Q&G+q{P-&Z^D4oY|?O&9eOX|!vvO!)lOL<_Qu zt}39Mw2oIei`DsUkrr~Y4Jd@}Rijy(L^W-OqhYK-}H&xi4h zL#R#zJN$c$WO|fNAU5;m~Z+G);ZeL2)vXruPuztw`y*sw-SZB_BX#qQqe54w9#oV<+udq^v2?O@GG()jtJfT; zR~#ROYkil>|~YZ8dpiBU@Ig;q7^g*9}Zo7 zwweTftl*o=vNw~_$C>DRqy5_IWTdajv@m?`5@`-YnoWH;vE79ve1o=vX)9Ykgf+yz zo-@N%R>x4W$3&hD^9_`XdWuV-ukLHii`9mfZWv?OGuq1pB)u}*BCGCC2{^5_Q|3XN zp~P!j!G75@-A6pJH(bYgDr;h>QxP`W65={4S!A)v$IkEKlWK)fix0Mp5vRIukA{rB z%&&WfU4!q3xSyBMfoh3&@ZPE!qDDlF)axeQ|4!|U3k@&qwk9VI82p+Q-xHUDr{1m& zt#lQZ@N@~QzO*~{HLlRcYKvmk@V0APy?|tCx(Dyu zhZEK2^tRtlC>zQ0dLQvF5TslX%A}}@*w3(TCwERo(#-9{g4W0`gl&$iGn*5_+TNC> zd54r0Lr4*{<>=QZu-p&$xJt!c3_mc5OLhOw-QoGD^VQqRGUseU!K8xqt?q=%=A_N@ zpgEpeisbtYNI!F@9gfi+2Hj+8H;N(#ZwZ03Dn%e!rebDh`xTdl)d~c&H$z3rb+ZZ6 zRodM`)6Evd9E8VnIAr8Shi@s*m)B&P=^>&f?w{l!ef4865k{vXbgOMx7ZnZpVG5r- zJC$eRY8I6o-xu3Z5^GyZqU@1B-1Q##PT#t*oHp>Hq;@ID5~f5dhPEdlKhm>Rc6fp6 z$AFxhT`(5iZ#Jy8>JMkOY8SpOKT1VUw(QF+h))VF3%kter1l?i5p470E)M0JYQ#JN z2f8NzV(L6H$n=(}EZnPK^?RW8T}qO7RS*@l9x&SuZz+xbg??-4UA^0(Jafu>SlsC` zzf4qf(&YRrlt4X^@B9<_h}O5%RYof~O`Qf}u)Aoq`-KJ(NXIud(h#+jO`+Ysrt|=k zz?bN8;W8!*dE%0<#CC1Br?7XnTN`RoEZHQsE_pI+A>9SZO zU%$8JB}6{eT?e8ireE0oQW`u;7)uMcDS zPGAmj+=xyDsy8{^G*j67Wp$@g{<4WyA?d1gh5smPEy`;U^p+(9loh_8HIfI^JkeTq zASh3MQ9@>g@2Xis(@*7TdZs3L&KRvJ=y?>_)JemI))!;G?E(3$w|?YNSxYLcuJ2aN zoXeaOWb#2_p1`5IX!%WsB?Iv#BM=@R3zPW?;L$m)b0% zl}eeaj6TV>x$BH1P4`aeqceBR`7C_eq#C})rd6VSGgaCH(-&?#zvna2FIq4M6u(R>$h8NJ9;w*pDjG5`DT$Y2)&kByYtgYWOjx zL+L!m(<#OZ?R7uwHT_Lu-B^{Pja3%qU|9-sfrlJ_;7(`uax~zW6P&>FyXAP5Wn=HBSD1{)J%mXpZO_S=} z7AGh7`Ygj#2}M&(6{9#(%?wMY;swO{f~7-a6Y(U=?bPtCCzuI*UBMpj^WDf2C`$~CtUO$2(uP>FSERA}Ty7doc7}Bg8(o?bnVLu0y8I2*X=I?(1 zDKt?ZhDLu_;#Ci-pP7ovz6gpB>DC)BTrU&N!R6qxp1W+?EsaMnLu!40bBzI%mxzXGmdr|wQazlj+1#1cU zYj0JGa-yRJw{?}*4hK#vuW&EaaMZ&V5yGl4w2Zzgi_O#~GJ8{y@>z1zM6bfrzL9xaM5Zdl9EcT)=$o)w30HK|ig$N>+ z5vDAbr6VJh$^xL{k4!(O1#?YQq*9>op8@yhp)fURuF!^1b?P8ZIB+I32~XhgNB4LK z`uDb#$Mgp8DM#)#`7P8o!bc`W+{9o3?hUAbV~!sX3aF(>r#aM&!Y;7e*9_;If~8gB zio`&@AD@(I;kWupb@eN9{2Iazj7?7|Gx@%5FG7T>Q!Gh)bxaKsvr4x0)CDDhf>KKl zd}(8mSUkT~RMD4n-7j<7KVNmacn|BBI&c1+_dRb6Szw{t61-u#i(p4YEf6~n-Z5Jd z6wjQ$YGdYp!B)e`Ya{dT=HY_xfs9l+CR6}31Y1fSe`ptG%${h9bo=h6C?o@;CTutD_qRGKN0C8zm$sIRD~ zXy5M7;o;BD+CbS6><#;#T+uv*$b&?qj@$sIJv{p16pGv&E;_cycH27}??0j`I=y-J zRg&VvDX$Zu_)G)CK;F0sD@`Z$OWYMWHFb5MgM)*gX)*L+vpr7ABhcRgj_k^JM2TtuaiNqAyLhVWezlNLk$=S8DW ziKw3b-p}8b>xWdaU+PwC8%`Zebu=^thEaz5lYw6tiQ@VVr_A-E-jtTia-BTV@XO%E z3ybKTwd=95&W2LC8ZelkxrK$>#_Tm-6~EK)-qfF#64v#Rda8Rjs8+Q;Y;aU^(;Gp} zE4cUX&kT*YXpFTTd$e>$P+IB~MFuAI^!jCg>#mxI)0up4Nrt2{lfCAiqZD8V^;VoF zh*jHl2+%-%;~BG^kLB|b@?SQWd^&LKIRB|<=$lNi*2SfGMd*=h24-41V%Pnqg%`ob zpR4k?lP+TP?@t7M%kPmLlKZq8=Omh&rQQ_g@W}jPk#zoHZJ4`cKtDH8=XG05@h2bT z6VBQUVOaNpO~8y`aVB5MdMClY%w(wvAVLJ44_u}IC0c*Es8*jyRA_V&H}&4HTT%85 zs7sBudqQjS`t_CB;vxA6%DwWGNq}8yV8O_Jk;Qal|ooNChhi(^Il9%n1(G z-S8Hnl2jI4XJR;0fCp^@-3$p#JKj(Um)4H4Gd_1La<>H7)DHyXdf1LV+_=jdwjXYP zoJF6)=@K&XoS7-?)V|;Ib(t$_ZUhr%(*k!@#+J;yAcBrDNdgSp`Fy)QnRfJTOZ6JC z;!yGyAtFS-Om5C@&rGY>aZ$FbMJHW)Lo|(@3_t|VimOc&vC)Vwk#~cVKK{~-uOmX* z;~%>cSVL>{imsoWtOGZxHw7$S#|H-QHx#klt?9K174RX3&1R;zNZCC(pUU#0J?2*K z+@6ha7^C^!+C6NNF@}~+KKWj%u}dr2o*=2f4A=MHWQNnSmVW#|;Y>bjCG^TcbBf-P z`P8O2ieP?T?n3-QD}{B#2#Hynxsd^T5VX}<^^_z>MAT9qpi+K*wz=J4;T+IRE6o>uE_NGf>1!ElQBOP)T@*Dv{pxhr=`N0((>WXtrya0a zrRpfhwSb&8Sl62LWv>J-xlhoa&KTtyEJ3j;4c7~~%lSp}+QYEs$)v-034LZmW&>su z(~Kg^vpL|)m4u^}(ML;u#1kY|QXW=%#!Pv^8yJY7&>9YYEPMjwdytggFg09*tswk) zai9XB9##V`@&f+2)nLc{ajU_;`1@AF;;3ufh$n^3yzkKU>(|-sG}yHcIoTofSjJ7t z0PF&XU!)X`Jvhl0*2>A|8hK~q`lO<~F7q8&W}CB;Ff36=*$t+yl+Zc)GNmB$D<3+a|sUyfF4 z&2bZt5&`%SPBt5*cLrT{usry2$rH#f&XeL!&0Ttq;AP)uEB4d5go7CTE%TIa{qwcE34ZAt~3Iv|E;P!E?5Gj}ORunMTy2FX9oGFNM76(6ad=X~<^>^!P(B&bs$TMxK zZAzqdH#enF8+;6m2>qXCvxi zF6cHFhEva#bNy~TwXKy`Wq0jMG_3Qb-*B(ZdyQL2I>iV9$E!f8LWN{u@4yYV5N{i*J z@2lFttFM>u)C#*!ot^x2c2;%=HWiP`dV6&@oVpvb0@W0ei=aFaMBSPC9%lP9cl=^! zqW+S=gWy0ru2{%2xNOk}{WvPgRw;GH*$;*dH4@e&;Oy(H#eYOJ)5LMHz1-ap}sdpXz_H z=vmq+uT+UX^||BxxFBJ6Qk46di#l|;=aHG_I=q(L6F%1du;=rA(qyDZe?Iw%Ls*4t z0Z;!t0J*~?7P7T^3Ln}Q+74Q-iZNw&L6UxjZ{xu0os|i|mGK!A=ltHzKwq7B_>Ur0 zxp`i4`nQ0q>fo*NhYFt|cFs&$P#xpC0jLJz}J zti*#I8C?oNFaHv2iWACo$gLnC%5fuNw{rDfPmZ@D8t*ps=sQ7P%T$rw544oQLjvGK z_pdE5(9Y#DXN0d>+OIhP(a3(uXIsdMt zmz323w)#c1;q7?M2l*y7Z8f_J^LI%Wp1HOwx6QBJbBEl~GP}i)oqKSIV1N>j_REkM z0@*QP?JuwR6rrcTMGxFYH2Qw9d%*`kaZ;3o=57;Mh#TqEt&vi2On}V{MQy%N$)brg z_H=}no>@tZuSh%u#~bPIb00&QV!&0=v_rdJg~Szcnp8~~12!alU*HR+EjDkdu$FRA zcCG&;6vYcbEOV8hsnUh%P*P{Yjl`H*8=^AYL5@W8q^G&dG2Nb5?05Z+rIa?^G#zeZ z>qCf!Z>>f=LuBV4bG}YZHd;VG-iaOyIHTqq?3)6vP^fpm&`lXD^y+6+fI};E}yy~gB z>|Bo50Iz+t5A`hPm2d4;`<)^9blOdb%of?M`RXMtqldWna=5McmA`VOm24SiS zDQYT%Aa0fx|Br3})!8FRnfGKj{I`3qI1aHluxtpT}_rZ-4 z^=OCtBkZo$66T-Vvu2bDqbQ&Cf$End$5!vjql>r+ioHK9;SM8GQS~yOxyy@P0kMXj z5?{qfp@*uXNUJP^prTBVkYB*wQH~f~_pX7HH96w>G1q)hwyxn}o5}Q5 zs#CXf@ViFs?rZWqvg?|^5Z#0Exsq0FrQ^817_-2>b?cR+5wBQxu&SCb*81x~6q8D$ zi)DKN?Nh^$5#-Oxo8A`G4fIc`?hXBmSnKNj-r=u;ByHcwd^~EetxAq$wZQLjrY%34 zFW?m=RMk#wMfqmveNg{_1_%)}L$d}g+_K>N0I!GE?ZI5YmSu+J&H%4p9l?fnoV^Mi zkHp`7U$Iqwx+F5Zl%kY_-Lyq}w6yI_?V9she`}X%_-YJ^k%yj_LJqB)*j+N;x_Z&d z{aM$0)!PM+qu(L+Ze7IT4>h>)5e!Z&8G!H)nRXw5cl)DI(RL8!MosjQjYm|=X-^Z@ zD^DXbIxG7M9Rt~5f(sM1NGr3dqR0hjiFRK14+v#)lI6>*Yk(eZq5A&tiskR^*4C>&y@_>sGH`#g6CaYv8~itFjL?>_viEi|Vsz!Bpgx3@7QMYl2e z2)_qenT;ASvhrvQ=DP!CWT+m2#7|3+A`e<+~qz+a?N7p&JJdKdTErfF}=4{G5r*`Cyp}3M_Tma@w{q; z8>51)a|cXl|7n#^se5**S%|}nCC7TOJpufyz8(iw?c!_g+z7t3Qc&-hkE@DDK~-(O z#Dct|8Iru*8-ni!Z@1dE*{8}Sqf^?x!N2BxQCq`)0#>WK^XDN>jhLBH6Y*7eE_4BW@7dO&ney;`IRJ^$x zVy#rPJXQ%tx`PZ|j&;$;CUBYa1ucuKs<-2Q@PApY56?pWbaSvGF_$~}L@LUrefe&Y z_VKGy>KBfh)X#A>X&IDYm;P@}gJt$qu5tg_Nb>7HeKvf*2#6?RA<^m??Op=JKMS;) zWlEK~Uvr_q9JBDMK&7|zeadICwrJ$qYgb+KPU5+RgNC$H)vnz8Lh$hvgHT zn4J3{1?8-&vn~JOnpMbEK1c51D)V(*8|%#H_dPS8h9#1V8+eFv^8gHFE6B!*x~&v7 zhT+@#7^&!T;<+-X!bf=BhXeStWvD#JZPyXPA-kjg!>a!b1`gpAz^Iq6A*?7^sCkqZ z$qX{AqD*L!sc=Uh=UiZgfqbRho%z!_OFP zx4HY#6df}or~)}IKyOs4uWWOo!pna_t{~8Tf2l4gUZc-lzwG;KW2%ybDaveKen*f| zDqK+fO**VM%#y>G+g&y?WFS>@&EKS*VV`e?_!{#^wg0OQZFzwXN@bD8fhj8u#NF-p zd1txan#_?8DU&>vFf7B|$xQRLM;BhV^X)z`Z77mxBDNw~;fji2fe)H9*VC6G7C-$il;_MNmW0cFT%4&Pu+B|RYf~u#&9o_8A zzJ%lm9dt2Q!%%-T9^(I`UVJVA)9U03EQ_?JnrYkEzh7xbKz!Oicl$EFPzK`EpH~__ zeU;SJbvwKEbE5mJBzs#c(D%js^wDPQF0yrm=^H4_Ds&yukIPZvf(RaRDCTbt)<;RQ8tC?>z#I7{hgE?ezU-wuVZV08Q z->o1r#}SmZIJBdsd{nI6pIb(RWqpA`<0`Ocy(doOSXI5@R=PLPjN)HiTl-v5A)Aw* z{dx3s6wY;+r*xEuv^!dO61mq5CNGD*xA@gwFFM^vm2e@a2svt%LBop4pCuSh#0 zE00XP5O8VfKIU6g4m36b_*DJlb(7_eKspKv*3)z#9Tz{oG6Y)yL-*lL>8xsk?$QB%Yjb! z^7lm}i6?P;8C)Jgkqm20YuzY(43nc)>@@5JthCqrWk@l0D|cYK<#tKnr2(tsf{{|8 zY`x?wN$23F^&KjbmN|@#-sDD28o$1Kf8;i658qIUYjH@0#@&%oUE^}GyN1(RzCz`( zs+Dg)vzvL`c<&nD72h4dzN2lIFGKa)pLWVaC^Um>Jw863+z;H#6ADOFLnS;%g>VDE zq7LjD&=qRSlXpcJ^O!e*#G6Oa35x+PIcigTz4%rj(W&o+|i#{~kdk&ZQ5x0ao6?JO>&0YE;^j74_n?(X0L<_caOV_#P<}2;& zl{Cg%lk;$A9BX^y5DCp7caa-8f}a`m4bf#*-vqHzz` zmmu}Fk1f4XD%Z)~0k+3yxgN$xzWahfk=}ik7IqCA-{I0scRd1E-qt!T1|z4b;jg`j z= config.line_limit and col > #text then + command.perform("doc:select-lines") + command.perform("reflow:reflow") + command.perform("doc:move-to-next-char") + command.perform("doc:move-to-previous-char") + end +end diff --git a/release_files/addons/plugins/bigclock.lua b/release_files/addons/plugins/bigclock.lua new file mode 100755 index 00000000..ac44c9f4 --- /dev/null +++ b/release_files/addons/plugins/bigclock.lua @@ -0,0 +1,73 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local style = require "core.style" +local command = require "core.command" +local common = require "core.common" +local config = require "core.config" +local View = require "core.view" + + +config.bigclock_time_format = "%H:%M:%S" +config.bigclock_date_format = "%A, %d %B %Y" +config.bigclock_scale = 1 + + +local ClockView = View:extend() + + +function ClockView:new() + ClockView.super.new(self) + self.time_text = "" + self.date_text = "" +end + + +function ClockView:get_name() + return "Big Clock" +end + + +function ClockView:update_fonts() + local size = math.floor(self.size.x * 0.15 / 15) * 15 * config.bigclock_scale + if self.font_size ~= size then + self.time_font = renderer.font.load(DATADIR .. "/fonts/font.ttf", size) + self.date_font = renderer.font.load(DATADIR .. "/fonts/font.ttf", size * 0.3) + self.font_size = size + collectgarbage() + end + return self.font +end + + +function ClockView:update() + local time_text = os.date(config.bigclock_time_format) + local date_text = os.date(config.bigclock_date_format) + if self.time_text ~= time_text or self.date_text ~= date_text then + core.redraw = true + self.time_text = time_text + self.date_text = date_text + end + ClockView.super.update(self) +end + + +function ClockView:draw() + self:update_fonts() + self:draw_background(style.background) + local x, y = self.position.x, self.position.y + local w, h = self.size.x, self.size.y + local _, y = common.draw_text(self.time_font, style.text, self.time_text, "center", x, y, w, h) + local th = self.date_font:get_height() + common.draw_text(self.date_font, style.dim, self.date_text, "center", x, y, w, th) +end + + +command.add(nil, { + ["big-clock:open"] = function() + local node = core.root_view:get_active_node() + node:add_view(ClockView()) + end, +}) + + +return ClockView diff --git a/release_files/addons/plugins/bracketmatch.lua b/release_files/addons/plugins/bracketmatch.lua new file mode 100755 index 00000000..e6a740d9 --- /dev/null +++ b/release_files/addons/plugins/bracketmatch.lua @@ -0,0 +1,118 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local style = require "core.style" +local command = require "core.command" +local keymap = require "core.keymap" +local DocView = require "core.docview" + +local bracket_maps = { + -- [ ] ( ) { } + { [91] = 93, [40] = 41, [123] = 125, step = 1 }, + -- ] [ ) ( } { + { [93] = 91, [41] = 40, [125] = 123, step = -1 }, +} + + +local function get_matching_bracket(doc, line, col, line_limit, open_byte, close_byte, step) + local end_line = line + line_limit * step + local depth = 0 + + while line ~= end_line do + local byte = doc.lines[line]:byte(col) + if byte == open_byte then + depth = depth + 1 + elseif byte == close_byte then + depth = depth - 1 + if depth == 0 then return line, col end + end + + local prev_line, prev_col = line, col + line, col = doc:position_offset(line, col, step) + if line == prev_line and col == prev_col then + break + end + end +end + + +local state = {} + +local function update_state(line_limit) + line_limit = line_limit or math.huge + + -- reset if we don't have a document (eg. DocView isn't focused) + local doc = core.active_view.doc + if not doc then + state = {} + return + end + + -- early exit if nothing has changed since the last call + local line, col = doc:get_selection() + local change_id = doc:get_change_id() + if state.doc == doc and state.line == line and state.col == col + and state.change_id == change_id and state.limit == line_limit then + return + end + + -- find matching bracket if we're on a bracket + local line2, col2 + for _, map in ipairs(bracket_maps) do + for i = 0, -1, -1 do + local line, col = doc:position_offset(line, col, i) + local open = doc.lines[line]:byte(col) + local close = map[open] + if close then + line2, col2 = get_matching_bracket(doc, line, col, line_limit, open, close, map.step) + goto found + end + end + end + ::found:: + + -- update + state = { + change_id = change_id, + doc = doc, + line = line, + col = col, + line2 = line2, + col2 = col2, + limit = line_limit, + } +end + + +local update = DocView.update + +function DocView:update(...) + update(self, ...) + update_state(100) +end + + +local draw_line_text = DocView.draw_line_text + +function DocView:draw_line_text(idx, x, y) + draw_line_text(self, idx, x, y) + + if self.doc == state.doc and idx == state.line2 then + local color = style.bracketmatch_color or style.syntax["function"] + local x1 = x + self:get_col_x_offset(idx, state.col2) + local x2 = x + self:get_col_x_offset(idx, state.col2 + 1) + local h = math.ceil(1 * SCALE) + renderer.draw_rect(x1, y + self:get_line_height() - h, x2 - x1, h, color) + end +end + + +command.add("core.docview", { + ["bracket-match:move-to-matching"] = function() + update_state() + if state.line2 then + core.active_view.doc:set_selection(state.line2, state.col2) + end + end, +}) + +keymap.add { ["ctrl+m"] = "bracket-match:move-to-matching" } diff --git a/release_files/addons/plugins/colorpreview.lua b/release_files/addons/plugins/colorpreview.lua new file mode 100755 index 00000000..370d1d8a --- /dev/null +++ b/release_files/addons/plugins/colorpreview.lua @@ -0,0 +1,54 @@ +-- mod-version:1 -- lite-xl 1.16 +local common = require "core.common" +local DocView = require "core.docview" + + +local white = { common.color "#ffffff" } +local black = { common.color "#000000" } +local tmp = {} + + +local function draw_color_previews(self, idx, x, y, ptn, base, nibbles) + local text = self.doc.lines[idx] + local s, e = 0, 0 + + while true do + s, e = text:find(ptn, e + 1) + if not s then break end + + local str = text:sub(s, e) + local r, g, b = str:match(ptn) + r, g, b = tonumber(r, base), tonumber(g, base), tonumber(b, base) + + -- #123 becomes #112233 + if nibbles then + r = r * 16 + g = g * 16 + b = b * 16 + end + + local x1 = x + self:get_col_x_offset(idx, s) + local x2 = x + self:get_col_x_offset(idx, e + 1) + local oy = self:get_line_text_y_offset() + + local text_color = math.max(r, g, b) < 128 and white or black + tmp[1], tmp[2], tmp[3] = r, g, b + + local l1, _, l2, _ = self.doc:get_selection(true) + + if not (self.doc:has_selection() and idx >= l1 and idx <= l2) then + renderer.draw_rect(x1, y, x2 - x1, self:get_line_height(), tmp) + renderer.draw_text(self:get_font(), str, x1, y + oy, text_color) + end + end +end + + +local draw_line_text = DocView.draw_line_text + +function DocView:draw_line_text(idx, x, y) + draw_line_text(self, idx, x, y) + draw_color_previews(self, idx, x, y, "#(%x%x)(%x%x)(%x%x)%f[%W]", 16) + draw_color_previews(self, idx, x, y, "#(%x)(%x)(%x)%f[%W]", 16, true) -- support #fff css format + draw_color_previews(self, idx, x, y, "rgba?%((%d+)%D+(%d+)%D+(%d+).-%)", 10) +end diff --git a/release_files/addons/plugins/eofnewline.lua b/release_files/addons/plugins/eofnewline.lua new file mode 100644 index 00000000..9ca907fc --- /dev/null +++ b/release_files/addons/plugins/eofnewline.lua @@ -0,0 +1,29 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local command = require "core.command" +local Doc = require "core.doc" + +local function eof_newline(doc) + local leof, neof = #doc.lines, #doc.lines + for i = leof, 1, -1 do + if not string.match(doc.lines[i], "^%s*$") then break end + neof = i + end + if neof ~= leof then + doc:remove(neof, 1, leof, math.huge) + return + end + if "\n" ~= doc.lines[leof] then doc:insert(leof, math.huge, "\n") end +end + +command.add("core.docview", { + ["eof-newline:eof-newline"] = function() + eof_newline(core.active_view.doc) + end, +}) + +local save = Doc.save +function Doc:save(...) + eof_newline(self) + save(self, ...) +end diff --git a/release_files/addons/plugins/ephemeraldocviews.lua b/release_files/addons/plugins/ephemeraldocviews.lua new file mode 100755 index 00000000..37b3a3b5 --- /dev/null +++ b/release_files/addons/plugins/ephemeraldocviews.lua @@ -0,0 +1,45 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local command = require "core.command" +local RootView = require "core.rootview" +local DocView = require "core.docview" +local Doc = require "core.doc" + +local open_doc = RootView.open_doc +function RootView:open_doc(doc) + local node = self:get_active_node_default() + local ephemeral, existing_ephemeral = node.views, nil + for i, view in ipairs(node.views) do + if view.doc == doc then + ephemeral = false + end + if view.doc and view.doc.ephemeral then + existing_ephemeral = view + end + end + if ephemeral and existing_ephemeral then + node:close_view(self.root_node, existing_ephemeral) + end + local view = open_doc(self, doc) + if ephemeral then + view.doc.ephemeral = #node.views > 1 + end + return view +end + +local get_name = DocView.get_name +function DocView:get_name() + return self.doc and self.doc.ephemeral and ("-- " .. get_name(self) .. " --") or get_name(self) +end + +local doc_insert = Doc.insert +function Doc:insert(...) + doc_insert(self, ...) + self.ephemeral = false +end + +local doc_remove = Doc.remove +function Doc:remove(...) + doc_remove(self, ...) + self.ephemeral = false +end diff --git a/release_files/addons/plugins/ghmarkdown.lua b/release_files/addons/plugins/ghmarkdown.lua new file mode 100644 index 00000000..364f26ca --- /dev/null +++ b/release_files/addons/plugins/ghmarkdown.lua @@ -0,0 +1,78 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local command = require "core.command" +local keymap = require "core.keymap" + + +local html = [[ + + + + ${title} + + + + + +]] + + +command.add("core.docview", { + ["ghmarkdown:show-preview"] = function() + local dv = core.active_view + + local content = dv.doc:get_text(1, 1, math.huge, math.huge) + local esc = { ['"'] = '\\"', ["\n"] = '\\n' } + local text = html:gsub("${(.-)}", { + title = dv:get_name(), + content = content:gsub(".", esc) + }) + + local htmlfile = core.temp_filename(".html") + local fp = io.open(htmlfile, "w") + fp:write(text) + fp:close() + + core.log("Opening markdown preview for \"%s\"", dv:get_name()) + if PLATFORM == "Windows" then + system.exec("start " .. htmlfile) + elseif PLATFORM == "AmigaOS 4" then + -- print("LUA DBG: " .. tostring(htmlfile)) + system.exec('urlopen "file=' .. htmlfile .. '"') + else + system.exec(string.format("xdg-open %q", htmlfile)) + end + + core.add_thread(function() + coroutine.yield(5) + os.remove(htmlfile) + end) + end +}) + + +keymap.add { ["ctrl+shift+m"] = "ghmarkdown:show-preview" } + diff --git a/release_files/addons/plugins/hidelinenumbers.lua b/release_files/addons/plugins/hidelinenumbers.lua new file mode 100755 index 00000000..5ed23b39 --- /dev/null +++ b/release_files/addons/plugins/hidelinenumbers.lua @@ -0,0 +1,6 @@ +-- mod-version:1 -- lite-xl 1.16 +local style = require "core.style" +local DocView = require "core.docview" + +DocView.draw_line_gutter = function() end +DocView.get_gutter_width = function() return style.padding.x end diff --git a/release_files/addons/plugins/indentguide.lua b/release_files/addons/plugins/indentguide.lua new file mode 100755 index 00000000..f1b7cf7d --- /dev/null +++ b/release_files/addons/plugins/indentguide.lua @@ -0,0 +1,50 @@ +-- mod-version:1 -- lite-xl 1.16 +local style = require "core.style" +local config = require "core.config" +local DocView = require "core.docview" + + +local function get_line_spaces(doc, idx, dir) + local text = doc.lines[idx] + if not text then + return 0 + end + local s, e = text:find("^%s*") + if e == #text then + return get_line_spaces(doc, idx + dir, dir) + end + local n = 0 + for i = s, e do + n = n + (text:byte(i) == 9 and config.indent_size or 1) + end + return n +end + + +local function get_line_indent_guide_spaces(doc, idx) + if doc.lines[idx]:find("^%s*\n") then + return math.max( + get_line_spaces(doc, idx - 1, -1), + get_line_spaces(doc, idx + 1, 1)) + end + return get_line_spaces(doc, idx) +end + + +local draw_line_text = DocView.draw_line_text + +function DocView:draw_line_text(idx, x, y) + local spaces = get_line_indent_guide_spaces(self.doc, idx) + local w = math.ceil(1 * SCALE) + local h = self:get_line_height() + local sspaces = "" + local font = self:get_font() + local ss = font:subpixel_scale() + for _ = 0, spaces - 1, config.indent_size do + local color = style.guide or style.selection + local sw = font:get_width_subpixel(sspaces) / ss + renderer.draw_rect(x + sw, y, w, h, color) + sspaces = sspaces .. (' '):rep(config.indent_size) + end + draw_line_text(self, idx, x, y) +end diff --git a/release_files/addons/plugins/language_make.lua b/release_files/addons/plugins/language_make.lua new file mode 100755 index 00000000..21e9df04 --- /dev/null +++ b/release_files/addons/plugins/language_make.lua @@ -0,0 +1,18 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "Makefile", "makefile", "%.mk$" }, + comment = "#", + patterns = { + { pattern = "#.*\n", type = "comment" }, + { pattern = [[\.]], type = "normal" }, + { pattern = "$[@^<%%?+|*]", type = "keyword2" }, + { pattern = "$%(.-%)", type = "variable" }, + { pattern = "%f[%w_][%d%.]+%f[^%w_]", type = "number" }, + { pattern = "%..*:", type = "keyword2" }, + { pattern = ".*:", type = "function" }, + }, + symbols = { + }, +} diff --git a/release_files/addons/plugins/language_sh.lua b/release_files/addons/plugins/language_sh.lua new file mode 100755 index 00000000..684b070f --- /dev/null +++ b/release_files/addons/plugins/language_sh.lua @@ -0,0 +1,43 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "%.sh$" }, + headers = "^#!.*bin.*sh\n", + comment = "#", + patterns = { + { pattern = "#.*\n", type = "comment" }, + { pattern = [[\.]], type = "normal" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = { '`', '`', '\\' }, type = "string" }, + { pattern = "%f[%w_][%d%.]+%f[^%w_]", type = "number" }, + { pattern = "[!<>|&%[%]=*]", type = "operator" }, + { pattern = "%f[%S]%-[%w%-_]+", type = "function" }, + { pattern = "${.-}", type = "keyword2" }, + { pattern = "$[%a_@*][%w_]*", type = "keyword2" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["case"] = "keyword", + ["do"] = "keyword", + ["done"] = "keyword", + ["elif"] = "keyword", + ["else"] = "keyword", + ["esac"] = "keyword", + ["fi"] = "keyword", + ["for"] = "keyword", + ["function"] = "keyword", + ["if"] = "keyword", + ["in"] = "keyword", + ["select"] = "keyword", + ["then"] = "keyword", + ["time"] = "keyword", + ["until"] = "keyword", + ["while"] = "keyword", + ["echo"] = "keyword", + ["true"] = "literal", + ["false"] = "literal", + }, +} + diff --git a/release_files/addons/plugins/lfautoinsert.lua b/release_files/addons/plugins/lfautoinsert.lua new file mode 100755 index 00000000..0534aa80 --- /dev/null +++ b/release_files/addons/plugins/lfautoinsert.lua @@ -0,0 +1,108 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local command = require "core.command" +local common = require "core.common" +local config = require "core.config" +local keymap = require "core.keymap" + +config.lfautoinsert_map = { + ["{%s*\n"] = "}", + ["%(%s*\n"] = ")", + ["%f[[]%[%s*\n"] = "]", + ["=%s*\n"] = false, + [":%s*\n"] = false, + ["->%s*\n"] = false, + ["^%s*<([^/][^%s>]*)[^>]*>%s*\n"] = "", + ["/%*%s*\n"] = "*/", + ["c/c++"] = { + file_patterns = { + "%.c$", "%.h$", "%.inl$", "%.cpp$", "%.hpp$", + "%.cc$", "%.C$", "%.cxx$", "%.c++$", "%.hh$", + "%.H$", "%.hxx$", "%.h++$" + }, + map = { + ["^#if.*\n"] = "#endif", + ["^#else.*\n"] = "#endif", + } + }, + ["lua"] = { + file_patterns = { "%.lua$" }, + map = { + ["%f[%w]do%s*\n"] = "end", + ["%f[%w]then%s*\n"] = "end", + ["%f[%w]else%s*\n"] = "end", + ["%f[%w]repeat%s*\n"] = "until", + ["%f[%w]function.*%)%s*\n"] = "end", + ["%[%[%s*\n"] = "]]" + } + }, +} + +local function get_autoinsert_map(filename) + local map = {} + for pattern, closing in pairs(config.lfautoinsert_map) do + if type(closing) == "table" then + if common.match_pattern(filename, closing.file_patterns) then + for p, e in pairs(closing.map) do + map[p] = e + end + end + else + map[pattern] = closing + end + end + + return map +end + + +local function indent_size(doc, line) + local text = doc.lines[line] or "" + local s, e = text:find("^[\t ]*") + return e - s +end + +command.add("core.docview", { + ["autoinsert:newline"] = function() + command.perform("doc:newline") + + local doc = core.active_view.doc + local line, col = doc:get_selection() + local text = doc.lines[line - 1] + + for ptn, close in pairs(get_autoinsert_map(doc.filename)) do + local s, _, str = text:find(ptn) + if s then + if close + and col == #doc.lines[line] + and indent_size(doc, line + 1) <= indent_size(doc, line - 1) + then + close = str and close:gsub("$TEXT", str) or close + command.perform("doc:newline") + core.active_view:on_text_input(close) + command.perform("doc:move-to-previous-line") + if doc.lines[line+1] == doc.lines[line+2] then + doc:remove(line+1, 1, line+2, 1) + end + elseif col < #doc.lines[line] then + command.perform("doc:newline") + command.perform("doc:move-to-previous-line") + end + command.perform("doc:indent") + end + end + end +}) + +keymap.add { + ["return"] = { "command:submit", "autoinsert:newline" } +} + +return { + add = function(file_patterns, map) + table.insert( + config.lfautoinsert_map, + { file_patterns = file_patterns, map=map } + ) + end +} diff --git a/release_files/addons/plugins/markers.lua b/release_files/addons/plugins/markers.lua new file mode 100755 index 00000000..f4a70d63 --- /dev/null +++ b/release_files/addons/plugins/markers.lua @@ -0,0 +1,104 @@ +-- mod-version:1 -- lite-xl 1.16 +-- Markers plugin for lite text editor +-- original implementation by Petri Häkkinen + +local core = require "core" +local command = require "core.command" +local keymap = require "core.keymap" +local style = require "core.style" +local DocView = require "core.docview" +local Doc = require "core.doc" + +local cache = {} -- this table contains subtables for each document, each subtable is a set of line numbers +setmetatable(cache, { + __mode = "k", + __index = function(t, k) + t[k] = {} + return t[k] + end, +}) + + +local function shift_lines(doc, at, diff) + if diff == 0 then return end + local t = {} + for line in pairs(cache[doc]) do + line = line >= at and line + diff or line + t[line] = true + end + cache[doc] = t +end + + +local raw_insert = Doc.raw_insert + +function Doc:raw_insert(line, col, text, ...) + raw_insert(self, line, col, text, ...) + local line_count = 0 + for _ in text:gmatch("\n") do + line_count = line_count + 1 + end + shift_lines(self, line, line_count) +end + + +local raw_remove = Doc.raw_remove + +function Doc:raw_remove(line1, col1, line2, col2, ...) + raw_remove(self, line1, col1, line2, col2, ...) + shift_lines(self, line2, line1 - line2) +end + + +local draw_line_gutter = DocView.draw_line_gutter + +function DocView:draw_line_gutter(idx, x, y) + if cache[self.doc] and cache[self.doc][idx] then + local h = self:get_line_height() + renderer.draw_rect(x, y, style.padding.x * 0.4, h, style.selection) + end + draw_line_gutter(self, idx, x, y) +end + + +command.add("core.docview", { + ["markers:toggle-marker"] = function() + local doc = core.active_view.doc + local line = doc:get_selection() + local markers = cache[doc] + + if markers[line] then + markers[line] = nil + else + markers[line] = true + end + end, + + ["markers:go-to-next-marker"] = function() + local doc = core.active_view.doc + local line = doc:get_selection() + local markers = cache[doc] + + local first_marker = math.huge + local next_marker = math.huge + for l, _ in pairs(markers) do + if l > line and l < next_marker then + next_marker = l + end + first_marker = math.min(first_marker, l) + end + if next_marker == math.huge then + next_marker = first_marker + end + if next_marker ~= math.huge then + doc:set_selection(next_marker, 1) + core.active_view:scroll_to_line(next_marker, true) + end + end, +}) + + +keymap.add { + ["ctrl+f2"] = "markers:toggle-marker", + ["f2"] = "markers:go-to-next-marker", +} diff --git a/release_files/addons/plugins/memoryusage.lua b/release_files/addons/plugins/memoryusage.lua new file mode 100755 index 00000000..ee472dd8 --- /dev/null +++ b/release_files/addons/plugins/memoryusage.lua @@ -0,0 +1,19 @@ +-- mod-version:1 -- lite-xl 1.16 +-- original implementation by AqilCont +local style = require "core.style" +local StatusView = require "core.statusview" + +local get_items = StatusView.get_items + +function StatusView:get_items() + local left, right = get_items(self) + local t = { + style.text, (math.floor(collectgarbage("count") / 10.24) / 100) .. " MB", + style.dim, self.separator2, + } + for i, item in ipairs(t) do + table.insert(right, i, item) + end + return left, right +end + diff --git a/release_files/addons/plugins/minimap.lua b/release_files/addons/plugins/minimap.lua new file mode 100755 index 00000000..ecae5eb5 --- /dev/null +++ b/release_files/addons/plugins/minimap.lua @@ -0,0 +1,299 @@ +-- mod-version:1 +local command = require "core.command" +local common = require "core.common" +local config = require "core.config" +local style = require "core.style" +local DocView = require "core.docview" + +-- General plugin settings +config.minimap_enabled = true +config.minimap_width = 100 +config.minimap_instant_scroll = false +config.minimap_syntax_highlight = true +config.minimap_scale = 1 + +-- how many spaces one tab is equivalent to +config.minimap_tab_width = 4 + +config.minimap_draw_background = true + +-- Configure size for rendering each char in the minimap +local char_height = 1 * SCALE * config.minimap_scale +local char_spacing = 0.8 * SCALE * config.minimap_scale +local line_spacing = 2 * SCALE * config.minimap_scale + +-- Overloaded since the default implementation adds a extra x3 size of hotspot for the mouse to hit the scrollbar. +local prev_scrollbar_overlaps_point = DocView.scrollbar_overlaps_point +DocView.scrollbar_overlaps_point = function(self, x, y) + if not config.minimap_enabled then + return prev_scrollbar_overlaps_point(self, x, y) + end + + local sx, sy, sw, sh = self:get_scrollbar_rect() + return x >= sx and x < sx + sw and y >= sy and y < sy + sh +end + +-- Helper function to determine if current file is too large to be shown fully inside the minimap area. +local function is_file_too_large(self) + local line_count = #self.doc.lines + local _, _, _, sh = self:get_scrollbar_rect() + + -- check if line count is too large to fit inside the minimap area + local max_minmap_lines = math.floor(sh / line_spacing) + return line_count > 1 and line_count > max_minmap_lines +end + +-- Overloaded with an extra check if the user clicked inside the minimap to automatically scroll to that line. +local prev_on_mouse_pressed = DocView.on_mouse_pressed +DocView.on_mouse_pressed = function(self, button, x, y, clicks) + if not config.minimap_enabled then + return prev_on_mouse_pressed(self, button, x, y, clicks) + end + + -- check if user clicked in the minimap area and jump directly to that line + -- unless they are actually trying to perform a drag + local minimap_hit = self:scrollbar_overlaps_point(x, y) + if minimap_hit then + local line_count = #self.doc.lines + local minimap_height = line_count * line_spacing + + -- check if line count is too large to fit inside the minimap area + local is_too_large = is_file_too_large(self) + if is_too_large then + local _, _, _, sh = self:get_scrollbar_rect() + minimap_height = sh + end + + -- calc which line to jump to + local dy = y - self.position.y + local jump_to_line = math.floor((dy / minimap_height) * line_count) + 1 + + local _, cy, _, cy2 = self:get_content_bounds() + local lh = self:get_line_height() + local visible_lines_count = math.max(1, (cy2 - cy) / lh) + local visible_lines_start = math.max(1, math.floor(cy / lh)) + + -- calc if user hit the currently visible area + local hit_visible_area = true + if is_too_large then + + local visible_height = visible_lines_count * line_spacing + local scroll_pos = (visible_lines_start - 1) / + (line_count - visible_lines_count - 1) + scroll_pos = math.min(1.0, scroll_pos) -- 0..1 + local visible_y = self.position.y + scroll_pos * + (minimap_height - visible_height) + + local t = (line_count - visible_lines_start) / visible_lines_count + if t <= 1 then visible_y = visible_y + visible_height * (1.0 - t) end + + if y < visible_y or y > visible_y + visible_height then + hit_visible_area = false + end + else + + -- If the click is on the currently visible line numbers, + -- ignore it since then they probably want to initiate a drag instead. + if jump_to_line < visible_lines_start or jump_to_line > visible_lines_start + + visible_lines_count then hit_visible_area = false end + end + + -- if user didn't click on the visible area (ie not dragging), scroll accordingly + if not hit_visible_area then + self:scroll_to_line(jump_to_line, false, config.minimap_instant_scroll) + return + end + + end + + return prev_on_mouse_pressed(self, button, x, y, clicks) +end + +-- Overloaded with pretty much the same logic as original DocView implementation, +-- with the exception of the dragging scrollbar delta. We want it to behave a bit snappier +-- since the "scrollbar" essentially represents the lines visible in the content view. +local prev_on_mouse_moved = DocView.on_mouse_moved +DocView.on_mouse_moved = function(self, x, y, dx, dy) + if not config.minimap_enabled then + return prev_on_mouse_moved(self, x, y, dx, dy) + end + + if self.dragging_scrollbar then + local line_count = #self.doc.lines + local lh = self:get_line_height() + local delta = lh / line_spacing * dy + + if is_file_too_large(self) then + local _, sy, _, sh = self:get_scrollbar_rect() + delta = (line_count * lh) / sh * dy + end + + self.scroll.to.y = self.scroll.to.y + delta + end + + -- we need to "hide" that the scrollbar is dragging so that View doesnt does its own scrolling logic + local t = self.dragging_scrollbar + self.dragging_scrollbar = false + local r = prev_on_mouse_moved(self, x, y, dx, dy) + self.dragging_scrollbar = t + return r +end + +-- Overloaded since we want the mouse to interact with the full size of the minimap area, +-- not juse the scrollbar. +local prev_get_scrollbar_rect = DocView.get_scrollbar_rect +DocView.get_scrollbar_rect = function(self) + if not config.minimap_enabled then return prev_get_scrollbar_rect(self) end + + return self.position.x + self.size.x - config.minimap_width * SCALE, + self.position.y, config.minimap_width * SCALE, self.size.y +end + +-- Overloaded so we can render the minimap in the "scrollbar area". +local prev_draw_scrollbar = DocView.draw_scrollbar +DocView.draw_scrollbar = function(self) + if not config.minimap_enabled then return prev_draw_scrollbar(self) end + + local x, y, w, h = self:get_scrollbar_rect() + + local highlight = self.hovered_scrollbar or self.dragging_scrollbar + local visual_color = highlight and style.scrollbar2 or style.scrollbar + + local _, cy, _, cy2 = self:get_content_bounds() + local lh = self:get_line_height() + local visible_lines_count = math.max(1, (cy2 - cy) / lh) + local visible_lines_start = math.max(1, math.floor(cy / lh)) + local scroller_height = visible_lines_count * line_spacing + local line_count = #self.doc.lines + + local visible_y = self.position.y + (visible_lines_start - 1) * line_spacing + + -- check if file is too large to fit inside the minimap area + local max_minmap_lines = math.floor(h / line_spacing) + local minimap_start_line = 1 + if is_file_too_large(self) then + + local scroll_pos = (visible_lines_start - 1) / + (line_count - visible_lines_count - 1) + scroll_pos = math.min(1.0, scroll_pos) -- 0..1, procent of visual area scrolled + + local scroll_pos_pixels = scroll_pos * (h - scroller_height) + visible_y = self.position.y + scroll_pos_pixels + + -- offset visible area if user is scrolling past end + local t = (line_count - visible_lines_start) / visible_lines_count + if t <= 1 then visible_y = visible_y + scroller_height * (1.0 - t) end + + minimap_start_line = visible_lines_start - + math.floor(scroll_pos_pixels / line_spacing) + minimap_start_line = math.max(1, math.min(minimap_start_line, + line_count - max_minmap_lines)) + end + + if config.minimap_draw_background then + renderer.draw_rect(x, y, w, h, style.minimap_background or style.background) + end + -- draw visual rect + renderer.draw_rect(x, visible_y, w, scroller_height, visual_color) + + -- time to draw the actual code, setup some local vars that are used in both highlighted and plain renderind. + local line_y = y + + -- when not using syntax highlighted rendering, just use the normal color but dim it 50%. + local color = style.syntax["normal"] + color = {color[1], color[2], color[3], color[4] * 0.5} + + -- we try to "batch" characters so that they can be rendered as just one rectangle instead of one for each. + local batch_width = 0 + local batch_start = x + local minimap_cutoff_x = x + config.minimap_width * SCALE + local batch_syntax_type = nil + local function flush_batch(type) + local old_color = color + color = style.syntax[batch_syntax_type] + if config.minimap_syntax_highlight and color ~= nil then + -- fetch and dim colors + color = {color[1], color[2], color[3], color[4] * 0.5} + else + color = old_color + end + if batch_width > 0 then + renderer.draw_rect(batch_start, line_y, batch_width, char_height, color) + end + batch_syntax_type = type + batch_start = batch_start + batch_width + batch_width = 0 + end + + -- render lines with syntax highlighting + if config.minimap_syntax_highlight then + + -- keep track of the highlight type, since this needs to break batches as well + batch_syntax_type = nil + + -- per line + local endidx = minimap_start_line + max_minmap_lines + endidx = math.min(endidx, line_count) + for idx = minimap_start_line, endidx do + batch_syntax_type = nil + batch_start = x + batch_width = 0 + + -- per token + for _, type, text in self.doc.highlighter:each_token(idx) do + -- flush prev batch + if not batch_syntax_type then batch_syntax_type = type end + if batch_syntax_type ~= type then flush_batch(type) end + + -- per character + for char in common.utf8_chars(text) do + if char == " " or char == "\n" then + flush_batch(type) + batch_start = batch_start + char_spacing + elseif char == " " then + flush_batch(type) + batch_start = batch_start + (char_spacing * config.minimap_tab_width) + elseif batch_start + batch_width > minimap_cutoff_x then + flush_batch(type) + break + else + batch_width = batch_width + char_spacing + end + + end + end + flush_batch(nil) + line_y = line_y + line_spacing + end + + else -- render lines without syntax highlighting + for idx = 1, line_count - 1 do + batch_start = x + batch_width = 0 + + for char in common.utf8_chars(self.doc.lines[idx]) do + if char == " " or char == "\n" then + flush_batch() + batch_start = batch_start + char_spacing + elseif batch_start + batch_width > minimap_cutoff_x then + flush_batch() + else + batch_width = batch_width + char_spacing + end + end + flush_batch() + line_y = line_y + line_spacing + end + + end + +end + +command.add(nil, { + ["minimap:toggle-visibility"] = function() + config.minimap_enabled = not config.minimap_enabled + end, + ["minimap:toggle-syntax-highlighting"] = function() + config.minimap_syntax_highlight = not config.minimap_syntax_highlight + end +}) diff --git a/release_files/addons/plugins/motiontrail.lua b/release_files/addons/plugins/motiontrail.lua new file mode 100755 index 00000000..6f448bbd --- /dev/null +++ b/release_files/addons/plugins/motiontrail.lua @@ -0,0 +1,47 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local config = require "core.config" +local style = require "core.style" +local DocView = require "core.docview" + +config.motiontrail_steps = 50 + + +local function lerp(a, b, t) + return a + (b - a) * t +end + + +local function get_caret_rect(dv) + local line, col = dv.doc:get_selection() + local x, y = dv:get_line_screen_position(line) + x = x + dv:get_col_x_offset(line, col) + return x, y, style.caret_width, dv:get_line_height() +end + + +local last_x, last_y, last_view + +local draw = DocView.draw + +function DocView:draw(...) + draw(self, ...) + if self ~= core.active_view then return end + + local x, y, w, h = get_caret_rect(self) + + if last_view == self and (x ~= last_x or y ~= last_y) then + local lx = x + for i = 0, 1, 1 / config.motiontrail_steps do + local ix = lerp(x, last_x, i) + local iy = lerp(y, last_y, i) + local iw = math.max(w, math.ceil(math.abs(ix - lx))) + renderer.draw_rect(ix, iy, iw, h, style.caret) + lx = ix + end + core.redraw = true + end + + last_view, last_x, last_y = self, x, y +end + diff --git a/release_files/addons/plugins/navigate.lua b/release_files/addons/plugins/navigate.lua new file mode 100755 index 00000000..dd985b59 --- /dev/null +++ b/release_files/addons/plugins/navigate.lua @@ -0,0 +1,170 @@ +-- mod-version:1 -- lite-xl 1.16 + +local core = require "core" +local common = require "core.common" +local command = require "core.command" +local keymap = require "core.keymap" +local Doc = require "core.doc" +local DocView = require "core.docview" + +local navigate = { + list = {}, + current = nil, + index = 0 +} + +-- +-- Private functions +-- +local function get_active_view() + if getmetatable(core.active_view) == DocView then + return core.active_view + end + return nil +end + +-- Solution to safely remove elements from array table: +-- found at https://stackoverflow.com/a/53038524 +local function array_remove(t, fnKeep) + local j, n = 1, #t; + + for i=1, n do + if (fnKeep(t, i, j)) then + if (i ~= j) then + t[j] = t[i]; + t[i] = nil; + end + j = j + 1; + else + t[i] = nil; + end + end + + return t; +end + +local function add(doc) + -- Make new navigation point last in list + if navigate.index > 0 and navigate.index < #navigate.list then + local remove_start = navigate.index + 1 + local remove_end = #navigate.list + array_remove(navigate.list, function(_, i) + if i >= remove_start and i <= remove_end then + return false + end + return true + end) + end + + local line, col = doc:get_selection() + table.insert(navigate.list, { + filename = doc.filename, + line = line, + col = col + }) + + navigate.current = navigate.list[#navigate.list] + navigate.index = #navigate.list +end + +local function open_doc(doc) + core.root_view:open_doc( + core.open_doc( + common.home_expand( + doc.filename + ) + ) + ) + + local av_doc = get_active_view().doc + local line, col = av_doc:get_selection() + if doc.line ~= line or doc.col ~= col then + av_doc:set_selection(doc.line, doc.col, doc.line, doc.col) + end +end + +-- +-- Public functions +-- +function navigate.next() + if navigate.index < #navigate.list then + navigate.index = navigate.index + 1 + navigate.current = navigate.list[navigate.index] + open_doc(navigate.current) + end +end + +function navigate.prev() + if navigate.index > 1 then + navigate.index = navigate.index - 1 + navigate.current = navigate.list[navigate.index] + open_doc(navigate.current) + end +end + +-- +-- Thread +-- +core.add_thread(function() + while true do + local av = get_active_view() + if av and av.doc and av.doc.filename then + local doc = av.doc + local line, col = doc:get_selection() + local current = navigate.current + if + not current + or + current.filename ~= doc.filename + or + current.line ~= line + then + add(doc) + else + current.col = col + end + end + coroutine.yield(0.5) + end +end) + +-- +-- Patching +-- +local doc_on_close = Doc.on_close + +function Doc:on_close() + local filename = self.filename + -- remove all positions referencing closed file + array_remove(navigate.list, function(t, i) + if t[i].filename == filename then + return false + end + return true + end) + + doc_on_close(self) +end + +-- +-- Commands +-- +command.add("core.docview", { + ["navigate:previous"] = function() + navigate.prev() + end, + + ["navigate:next"] = function() + navigate.next() + end, +}) + +-- +-- Default Keybindings +-- +keymap.add { + ["alt+left"] = "navigate:previous", + ["alt+right"] = "navigate:next", +} + +return navigate diff --git a/release_files/addons/plugins/rainbowparen.lua b/release_files/addons/plugins/rainbowparen.lua new file mode 100755 index 00000000..b6075ac5 --- /dev/null +++ b/release_files/addons/plugins/rainbowparen.lua @@ -0,0 +1,59 @@ +-- mod-version:1 -- lite-xl 1.16 +local tokenizer = require "core.tokenizer" +local style = require "core.style" +local common = require "core.common" + +local tokenize = tokenizer.tokenize +local closers = { + ["("] = ")", + ["["] = "]", + ["{"] = "}" +} +local function parenstyle(parenstack) + return "paren" .. ((#parenstack % 5) + 1) +end +function tokenizer.tokenize(syntax, text, state) + state = state or {} + local res, istate = tokenize(syntax, text, state.istate) + local parenstack = state.parenstack or "" + local newres = {} + -- split parens out + -- the stock tokenizer can't do this because it merges identical adjacent tokens + for i, type, text in tokenizer.each_token(res) do + if type == "normal" or type == "symbol" then + for normtext1, paren, normtext2 in text:gmatch("([^%(%[{}%]%)]*)([%(%[{}%]%)]?)([^%(%[{}%]%)]*)") do + if #normtext1 > 0 then + table.insert(newres, type) + table.insert(newres, normtext1) + end + if #paren > 0 then + if paren == parenstack:sub(-1) then -- expected closer + parenstack = parenstack:sub(1, -2) + table.insert(newres, parenstyle(parenstack)) + elseif closers[paren] then -- opener + table.insert(newres, parenstyle(parenstack)) + parenstack = parenstack .. closers[paren] + else -- unexpected closer + table.insert(newres, "paren_unbalanced") + end + table.insert(newres, paren) + end + if #normtext2 > 0 then + table.insert(newres, type) + table.insert(newres, normtext2) + end + end + else + table.insert(newres, type) + table.insert(newres, text) + end + end + return newres, { parenstack = parenstack, istate = istate } +end + +style.syntax.paren_unbalanced = style.syntax.paren_unbalanced or { common.color "#DC0408" } +style.syntax.paren1 = style.syntax.paren1 or { common.color "#FC6F71"} +style.syntax.paren2 = style.syntax.paren2 or { common.color "#fcb053"} +style.syntax.paren3 = style.syntax.paren3 or { common.color "#fcd476"} +style.syntax.paren4 = style.syntax.paren4 or { common.color "#52dab2"} +style.syntax.paren5 = style.syntax.paren5 or { common.color "#5a98cf"} diff --git a/release_files/addons/plugins/restoretabs.lua b/release_files/addons/plugins/restoretabs.lua new file mode 100755 index 00000000..6776e2c3 --- /dev/null +++ b/release_files/addons/plugins/restoretabs.lua @@ -0,0 +1,55 @@ +-- mod-version:1 -- lite-xl 1.16 +-- Not perfect, because we can't actually figure out when something closes, but should be good enough, so long as we check the list of open views. +-- Maybe find a better way to get at "Node"? +local core = require "core" +local RootView = require "core.rootview" +local command = require "core.command" +local keymap = require "core.keymap" + +local update = RootView.update +local initialized_tab_system = false + +local tab_history = { } +local history_size = 10 + +RootView.update = function(self) + update(self) + if not initialized_tab_system then + local Node = getmetatable(self.root_node) + local old_close = Node.close_view + + Node.close_view = function(self, root, view) + if view.doc and view.doc.abs_filename then + local closing_filename = view.doc.abs_filename + for i,filename in ipairs(tab_history) do + if filename == closing_filename then + table.remove(tab_history, i) + break + end + end + table.insert(tab_history, closing_filename) + if #tab_history > history_size then + table.remove(tab_history, 1) + end + end + old_close(self, root, view) + end + + initialized_tab_system = true + end +end + + +command.add("core.docview", { + ["restore-tabs:restore-tab"] = function() + if #tab_history > 0 then + local file = tab_history[#tab_history] + core.root_view:open_doc(core.open_doc(file)) + table.remove(tab_history) + end + end +}) + +keymap.add { + ["ctrl+shift+t"] = "restore-tabs:restore-tab" +} diff --git a/release_files/addons/plugins/selectionhighlight.lua b/release_files/addons/plugins/selectionhighlight.lua new file mode 100755 index 00000000..93ac0fb2 --- /dev/null +++ b/release_files/addons/plugins/selectionhighlight.lua @@ -0,0 +1,42 @@ +-- mod-version:1 -- lite-xl 1.16 +local style = require "core.style" +local DocView = require "core.docview" +local config = require "core.config" + +-- originally written by luveti + +local function draw_box(x, y, w, h, color) + local r = renderer.draw_rect + local s = math.ceil(SCALE) + r(x, y, w, s, color) + r(x, y + h - s, w, s, color) + r(x, y + s, s, h - s * 2, color) + r(x + w - s, y + s, s, h - s * 2, color) +end + + +local draw_line_body = DocView.draw_line_body + +function DocView:draw_line_body(idx, x, y) + local line1, col1, line2, col2 = self.doc:get_selection(true) + local selection = self.doc:get_text(line1, col1, line2, col2) + if line1 == line2 and col1 ~= col2 and not selection:match("^%s+$") then + local lh = self:get_line_height() + local selected_text = self.doc.lines[line1]:sub(col1, col2 - 1) + local current_line_text = self.doc.lines[idx] + local last_col = 1 + while true do + local start_col, end_col = current_line_text:find( + selected_text, last_col, true + ) + if start_col == nil then break end + local x1 = x + self:get_col_x_offset(idx, start_col) + local x2 = x + self:get_col_x_offset(idx, end_col + 1) + local color = style.selectionhighlight or style.syntax.comment + draw_box(x1, y, x2 - x1, lh, color) + last_col = end_col + 1 + end + end + draw_line_body(self, idx, x, y) +end + diff --git a/release_files/addons/plugins/todotreeview-xl.lua b/release_files/addons/plugins/todotreeview-xl.lua new file mode 100644 index 00000000..8f180a9b --- /dev/null +++ b/release_files/addons/plugins/todotreeview-xl.lua @@ -0,0 +1,356 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local common = require "core.common" +local command = require "core.command" +local config = require "core.config" +local keymap = require "core.keymap" +local style = require "core.style" +local View = require "core.view" + + +local TodoTreeView = View:extend() + +config.todo_tags = {"TODO", "BUG", "FIX", "FIXME", "IMPROVEMENT"} + +-- Paths or files to be ignored +config.ignore_paths = {} + +-- Tells if the plugin should start with the nodes expanded +config.todo_expanded = true + +-- 'tag' mode can be used to group the todos by tags +-- 'file' mode can be used to group the todos by files +config.todo_mode = "tag" + +config.treeview_size = 200 * SCALE -- default size + +function TodoTreeView:new() + TodoTreeView.super.new(self) + self.scrollable = true + self.focusable = false + self.visible = false + self.times_cache = {} + self.cache = {} + self.cache_updated = false + self.init_size = true + + -- Items are generated from cache according to the mode + self.items = {} +end + +local function is_file_ignored(filename) + for _, path in ipairs(config.ignore_paths) do + local s, _ = filename:find(path) + if s then + return true + end + end + + return false +end + +function TodoTreeView:refresh_cache() + local items = {} + if not next(self.items) then + items = self.items + end + self.updating_cache = true + + core.add_thread(function() + for _, item in ipairs(core.project_files) do + local ignored = is_file_ignored(item.filename) + if not ignored and item.type == "file" then + local cached = self:get_cached(item) + + if config.todo_mode == "file" then + items[cached.filename] = cached + else + for _, todo in ipairs(cached.todos) do + local tag = todo.tag + if not items[tag] then + local t = {} + t.expanded = config.todo_expanded + t.type = "group" + t.todos = {} + t.tag = tag + items[tag] = t + end + + table.insert(items[tag].todos, todo) + end + end + end + end + + -- Copy expanded from old items + if config.todo_mode == "tag" and next(self.items) then + for tag, data in pairs(self.items) do + if items[tag] then + items[tag].expanded = data.expanded + end + end + end + + self.items = items + core.redraw = true + self.cache_updated = true + self.updating_cache = false + end, self) +end + + +local function find_file_todos(t, filename) + local fp = io.open(filename) + if not fp then return t end + local n = 1 + for line in fp:lines() do + for _, todo_tag in ipairs(config.todo_tags) do + local match_str = "[^a-zA-Z_\"'`]"..todo_tag.."[^\"'a-zA-Z_`]+" + local s, e = line:find(match_str) + if s then + local d = {} + d.tag = todo_tag + d.filename = filename + d.text = line:sub(e+1) + d.line = n + d.col = s + table.insert(t, d) + end + core.redraw = true + end + if n % 100 == 0 then coroutine.yield() end + n = n + 1 + core.redraw = true + end + fp:close() +end + + +function TodoTreeView:get_cached(item) + local t = self.cache[item.filename] + if not t then + t = {} + t.expanded = config.todo_expanded + t.filename = item.filename + t.abs_filename = system.absolute_path(item.filename) + t.type = item.type + t.todos = {} + find_file_todos(t.todos, t.filename) + self.cache[t.filename] = t + end + return t +end + + +function TodoTreeView:get_name() + return "Todo Tree" +end + +function TodoTreeView:set_target_size(axis, value) + if axis == "x" then + config.treeview_size = value + return true + end +end + +function TodoTreeView:get_item_height() + return style.font:get_height() + style.padding.y +end + + +function TodoTreeView:get_cached_time(doc) + local t = self.times_cache[doc] + if not t then + local info = system.get_file_info(doc.filename) + if not info then return nil end + self.times_cache[doc] = info.modified + end + return t +end + + +function TodoTreeView:check_cache() + for _, doc in ipairs(core.docs) do + if doc.filename then + local info = system.get_file_info(doc.filename) + local cached = self:get_cached_time(doc) + if not info and cached then + -- document deleted + self.times_cache[doc] = nil + self.cache[doc.filename] = nil + self.cache_updated = false + elseif cached and cached ~= info.modified then + -- document modified + self.times_cache[doc] = info.modified + self.cache[doc.filename] = nil + self.cache_updated = false + end + end + end + + if core.project_files ~= self.last_project_files then + self.last_project_files = core.project_files + self.cache_updated = false + end +end + +function TodoTreeView:each_item() + self:check_cache() + if not self.updating_cache and not self.cache_updated then + self:refresh_cache() + end + + return coroutine.wrap(function() + local ox, oy = self:get_content_offset() + local y = oy + style.padding.y + local w = self.size.x + local h = self:get_item_height() + + for _, item in pairs(self.items) do + if #item.todos > 0 then + coroutine.yield(item, ox, y, w, h) + y = y + h + + for _, todo in ipairs(item.todos) do + if item.expanded then + coroutine.yield(todo, ox, y, w, h) + y = y + h + end + end + end + end + end) +end + + +function TodoTreeView:on_mouse_moved(px, py) + self.hovered_item = nil + for item, x,y,w,h in self:each_item() do + if px > x and py > y and px <= x + w and py <= y + h then + self.hovered_item = item + break + end + end +end + + +function TodoTreeView:on_mouse_pressed(button, x, y) + if not self.hovered_item then + return + elseif self.hovered_item.type == "file" + or self.hovered_item.type == "group" then + self.hovered_item.expanded = not self.hovered_item.expanded + else + core.try(function() + local i = self.hovered_item + local dv = core.root_view:open_doc(core.open_doc(i.filename)) + core.root_view.root_node:update_layout() + dv.doc:set_selection(i.line, i.col) + dv:scroll_to_line(i.line, false, true) + end) + end +end + + +function TodoTreeView:update() + self.scroll.to.y = math.max(0, self.scroll.to.y) + + -- update width + local dest = self.visible and config.treeview_size or 0 + if self.init_size then + self.size.x = dest + self.init_size = false + else + self:move_towards(self.size, "x", dest) + end + + TodoTreeView.super.update(self) +end + + +function TodoTreeView:draw() + self:draw_background(style.background2) + + --local h = self:get_item_height() + local icon_width = style.icon_font:get_width("D") + local spacing = style.font:get_width(" ") * 2 + local root_depth = 0 + + for item, x,y,w,h in self:each_item() do + local color = style.text + + -- hovered item background + if item == self.hovered_item then + renderer.draw_rect(x, y, w, h, style.line_highlight) + color = style.accent + end + + -- icons + local item_depth = 0 + x = x + (item_depth - root_depth) * style.padding.x + style.padding.x + if item.type == "file" then + local icon1 = item.expanded and "-" or "+" + common.draw_text(style.icon_font, color, icon1, nil, x, y, 0, h) + x = x + style.padding.x + common.draw_text(style.icon_font, color, "f", nil, x, y, 0, h) + x = x + icon_width + elseif item.type == "group" then + local icon1 = item.expanded and "-" or ">" + common.draw_text(style.icon_font, color, icon1, nil, x, y, 0, h) + x = x + icon_width / 2 + else + if config.todo_mode == "tag" then + x = x + style.padding.x + else + x = x + style.padding.x * 1.5 + end + common.draw_text(style.icon_font, color, "i", nil, x, y, 0, h) + x = x + icon_width + end + + -- text + x = x + spacing + if item.type == "file" then + common.draw_text(style.font, color, item.filename, nil, x, y, 0, h) + elseif item.type == "group" then + common.draw_text(style.font, color, item.tag, nil, x, y, 0, h) + else + if config.todo_mode == "file" then + common.draw_text(style.font, color, item.tag.." - "..item.text, nil, x, y, 0, h) + else + common.draw_text(style.font, color, item.text, nil, x, y, 0, h) + end + end + end +end + + +-- init +local view = TodoTreeView() +local node = core.root_view:get_active_node() +view.size.x = config.treeview_size +node:split("right", view, {x=true}, true) + +-- register commands and keymap +command.add(nil, { + ["todotreeview:toggle"] = function() + view.visible = not view.visible + end, + + ["todotreeview:expand-items"] = function() + for _, item in pairs(view.items) do + item.expanded = true + end + end, + + ["todotreeview:hide-items"] = function() + for _, item in pairs(view.items) do + item.expanded = false + end + end, +}) + +keymap.add { ["ctrl+shift+t"] = "todotreeview:toggle" } +keymap.add { ["ctrl+shift+e"] = "todotreeview:expand-items" } +keymap.add { ["ctrl+shift+h"] = "todotreeview:hide-items" } + diff --git a/release_files/lite.info b/release_files/lite.info index 7247e1c3eb2cd29cce766f874283f958b903ee7d..5a64ba5a808d071a42bf8d0a08ad2304d2cc90f3 100644 GIT binary patch delta 16 XcmcbRb0KGfEvq8~1B3ZSCq6R(H3