diff options
author | Takase <20792268+takase1121@users.noreply.github.com> | 2021-05-31 11:18:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-31 11:18:12 +0800 |
commit | 0d87d70140b8c318ca171330658d3a7cf00f5037 (patch) | |
tree | eb333ce5d63f7f393b61ac544124be5398496d3a /plugins | |
parent | a07e30be3827f9444f967ba633171ea8c90cd41e (diff) | |
parent | 5b9a3bd28d937d131da5821f075952df80c14040 (diff) | |
download | lite-xl-plugins-0d87d70140b8c318ca171330658d3a7cf00f5037.tar.gz lite-xl-plugins-0d87d70140b8c318ca171330658d3a7cf00f5037.zip |
Merge branch 'master' into contextmenu
Diffstat (limited to 'plugins')
86 files changed, 1295 insertions, 602 deletions
diff --git a/plugins/autoinsert.lua b/plugins/autoinsert.lua index 243e00b..7af2209 100644 --- a/plugins/autoinsert.lua +++ b/plugins/autoinsert.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local translate = require "core.doc.translate" local config = require "core.config" diff --git a/plugins/autosave.lua b/plugins/autosave.lua new file mode 100644 index 0000000..2759ba6 --- /dev/null +++ b/plugins/autosave.lua @@ -0,0 +1,46 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" +local config = require "core.config" +local Doc = require "core.doc" +local DocView = require "core.docview" +local command = require "core.command" +-- this is used to detect the wait time +local last_keypress = os.time() +-- this exists so that we don't end up with multiple copies of the loop running at once +local looping = false +local on_text_change = Doc.on_text_change +-- the approximate amount of time, in seconds, that it takes to trigger an autosave +config.autosave_timeout = 1 + + +local function loop_for_save() + while looping do + if os.difftime(os.time(), last_keypress) >= config.autosave_timeout then + command.perform "doc:save" + -- stop loop + looping = false + end + -- wait the timeout. may cause timeout to be slightly imprescise + coroutine.yield(config.autosave_timeout) + end +end + + +local function updatepress() + -- set last keypress time to now + last_keypress = os.time() + -- put loop in coroutine so it doesn't lag out this script + if not looping then + looping = true + core.add_thread(loop_for_save) + end +end + + +function Doc:on_text_change(type) + -- check if file is saved + if self.filename then + updatepress() + end + return on_text_change(type) +end diff --git a/plugins/autowrap.lua b/plugins/autowrap.lua index 85d4c24..1d5d08d 100644 --- a/plugins/autowrap.lua +++ b/plugins/autowrap.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 require "plugins.reflow" local config = require "core.config" local command = require "core.command" diff --git a/plugins/bigclock.lua b/plugins/bigclock.lua index e35cdbe..ac44c9f 100644 --- a/plugins/bigclock.lua +++ b/plugins/bigclock.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local style = require "core.style" local command = require "core.command" @@ -29,8 +30,8 @@ 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(EXEDIR .. "/data/fonts/font.ttf", size) - self.date_font = renderer.font.load(EXEDIR .. "/data/fonts/font.ttf", size * 0.3) + 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 diff --git a/plugins/bracketmatch.lua b/plugins/bracketmatch.lua index 4253de7..e6a740d 100644 --- a/plugins/bracketmatch.lua +++ b/plugins/bracketmatch.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local style = require "core.style" local command = require "core.command" diff --git a/plugins/centerdoc.lua b/plugins/centerdoc.lua index 1921467..c60c2dd 100644 --- a/plugins/centerdoc.lua +++ b/plugins/centerdoc.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local config = require "core.config" local DocView = require "core.docview" diff --git a/plugins/closeconfirmx.lua b/plugins/closeconfirmx.lua deleted file mode 100644 index 805fe3b..0000000 --- a/plugins/closeconfirmx.lua +++ /dev/null @@ -1,54 +0,0 @@ --- CloseConfirmX plugin for lite text editor --- implementation by chekoopa - -local core = require "core" -local config = require "core.config" - -config.closeconfirmx_use_legacy = false -config.closeconfirmx_use_short_name = true - -local legacy_confirm = core.confirm_close_all - -local function commandful_confirm() - local dirty_count = 0 - local dirty_name - for _, doc in ipairs(core.docs) do - if doc:is_dirty() then - dirty_count = dirty_count + 1 - dirty_name = doc:get_name() - end - end - if dirty_count > 0 then - local text - if dirty_count == 1 then - if config.closeconfirmx_use_short_name then - dirty_name = dirty_name:match("[^/%\\]*$") - end - text = string.format("Unsaved changes in \"%s\"; Confirm Exit", dirty_name) - else - text = string.format("Unsaved changes in %d docs; Confirm Exit", dirty_count) - end - core.command_view:enter(text, function(_, item) - if item.text:match("^[cC]") then - core.quit(true) - end - end, function(text) - local items = {} - if not text:find("^[^sS]") then table.insert(items, "Stay here") end - if not text:find("^[^cC]") then table.insert(items, "Close Without Saving") end - return items - end) - -- as we delegate a choice inside the callback, - return false - end - return true -end - -function core.confirm_close_all() - if config.closeconfirmx_use_legacy then - return legacy_confirm() - else - return commandful_confirm() - end -end - diff --git a/plugins/colorpreview.lua b/plugins/colorpreview.lua index dca419c..370d1d8 100644 --- a/plugins/colorpreview.lua +++ b/plugins/colorpreview.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local common = require "core.common" local DocView = require "core.docview" diff --git a/plugins/copyfilelocation.lua b/plugins/copyfilelocation.lua index d365240..9f33ee1 100644 --- a/plugins/copyfilelocation.lua +++ b/plugins/copyfilelocation.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local config = require "core.config" @@ -6,12 +7,11 @@ local config = require "core.config" command.add("core.docview", { ["copy-file-location:copy-file-location"] = function() local doc = core.active_view.doc - if not doc.filename then + if not doc.abs_filename then core.error "Cannot copy location of unsaved doc" return end - local filename = system.absolute_path(doc.filename) - core.log("Copying to clipboard \"%s\"", filename) - system.set_clipboard(filename) + core.log("Copying to clipboard \"%s\"", doc.abs_filename) + system.set_clipboard(doc.abs_filename) end }) diff --git a/plugins/datetimestamps.lua b/plugins/datetimestamps.lua index 518f0a9..9ce425a 100644 --- a/plugins/datetimestamps.lua +++ b/plugins/datetimestamps.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local config = require "core.config" local command = require "core.command" diff --git a/plugins/detectindent.lua b/plugins/detectindent.lua deleted file mode 100644 index 9c473b5..0000000 --- a/plugins/detectindent.lua +++ /dev/null @@ -1,64 +0,0 @@ -local core = require "core" -local command = require "core.command" -local config = require "core.config" -local DocView = require "core.docview" -local Doc = require "core.doc" - -local cache = setmetatable({}, { __mode = "k" }) - - -local function detect_indent(doc) - for _, text in ipairs(doc.lines) do - local str = text:match("^ +") - if str then return "soft", #str end - local str = text:match("^\t+") - if str then return "hard" end - end -end - - -local function update_cache(doc) - local type, size = detect_indent(doc) - if type then - cache[doc] = { type = type, size = size } - end -end - - -local new = Doc.new -function Doc:new(...) - new(self, ...) - update_cache(self) -end - -local clean = Doc.clean -function Doc:clean(...) - clean(self, ...) - update_cache(self) -end - - -local function with_indent_override(doc, fn, ...) - local c = cache[doc] - if not c then - return fn(...) - end - local type, size = config.tab_type, config.indent_size - config.tab_type, config.indent_size = c.type, c.size or config.indent_size - local r1, r2, r3 = fn(...) - config.tab_type, config.indent_size = type, size - return r1, r2, r3 -end - - -local perform = command.perform -function command.perform(...) - return with_indent_override(core.active_view.doc, perform, ...) -end - - -local draw = DocView.draw -function DocView:draw(...) - return with_indent_override(self.doc, draw, self, ...) -end - diff --git a/plugins/dragdropselected.lua b/plugins/dragdropselected.lua index a2ce67f..aeacbd3 100644 --- a/plugins/dragdropselected.lua +++ b/plugins/dragdropselected.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 --[[ dragdropselected.lua provides basic drag and drop of selected text (in same document) diff --git a/plugins/drawwhitespace.lua b/plugins/drawwhitespace.lua deleted file mode 100644 index c6ed07d..0000000 --- a/plugins/drawwhitespace.lua +++ /dev/null @@ -1,37 +0,0 @@ -local common = require "core.common" -local config = require "core.config" -local style = require "core.style" -local DocView = require "core.docview" -local command = require "core.command" - --- originally written by luveti - -config.whitespace_map = { [" "] = "·", ["\t"] = "»" } -config.draw_whitespace = true - -local draw_line_text = DocView.draw_line_text - -function DocView:draw_line_text(idx, x, y) - draw_line_text(self, idx, x, y) - if not config.draw_whitespace then return end - - local text = self.doc.lines[idx] - local tx, ty = x, y + self:get_line_text_y_offset() - local font = self:get_font() - local color = style.whitespace or style.syntax.comment - local map = config.whitespace_map - - for chr in common.utf8_chars(text) do - local rep = map[chr] - if rep then - renderer.draw_text(font, rep, tx, ty, color) - end - tx = tx + font:get_width(chr) - end -end - -command.add("core.docview", { - ["draw-whitespace:toggle"] = function() config.draw_whitespace = not config.draw_whitespace end, - ["draw-whitespace:disable"] = function() config.draw_whitespace = false end, - ["draw-whitespace:enable"] = function() config.draw_whitespace = true end, -}) diff --git a/plugins/eval.lua b/plugins/eval.lua index 54e08ba..ae13a14 100644 --- a/plugins/eval.lua +++ b/plugins/eval.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" diff --git a/plugins/exec.lua b/plugins/exec.lua index fe87afc..d1ed6a8 100644 --- a/plugins/exec.lua +++ b/plugins/exec.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" diff --git a/plugins/ghmarkdown.lua b/plugins/ghmarkdown.lua index 0f49c02..6e81daa 100644 --- a/plugins/ghmarkdown.lua +++ b/plugins/ghmarkdown.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local keymap = require "core.keymap" diff --git a/plugins/gitstatus.lua b/plugins/gitstatus.lua index a58fd0f..904cd38 100644 --- a/plugins/gitstatus.lua +++ b/plugins/gitstatus.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local config = require "core.config" local style = require "core.style" diff --git a/plugins/gofmt.lua b/plugins/gofmt.lua index 11c90b9..fd204a6 100644 --- a/plugins/gofmt.lua +++ b/plugins/gofmt.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local keymap = require "core.keymap" diff --git a/plugins/hidelinenumbers.lua b/plugins/hidelinenumbers.lua index 206bd23..5ed23b3 100644 --- a/plugins/hidelinenumbers.lua +++ b/plugins/hidelinenumbers.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local style = require "core.style" local DocView = require "core.docview" diff --git a/plugins/hidestatus.lua b/plugins/hidestatus.lua index 5c0bb15..fc687cb 100644 --- a/plugins/hidestatus.lua +++ b/plugins/hidestatus.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local command = require "core.command" local StatusView = require "core.statusview" diff --git a/plugins/inanimate.lua b/plugins/inanimate.lua deleted file mode 100644 index a01aa40..0000000 --- a/plugins/inanimate.lua +++ /dev/null @@ -1,12 +0,0 @@ -local core = require "core" -local View = require "core.view" - -function View:move_towards(t, k, dest) - if type(t) ~= "table" then - return self:move_towards(self, t, k, dest) - end - if t[k] ~= dest then - core.redraw = true - end - t[k] = dest -end diff --git a/plugins/indentguide.lua b/plugins/indentguide.lua index daf7d8b..f1b7cf7 100644 --- a/plugins/indentguide.lua +++ b/plugins/indentguide.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local style = require "core.style" local config = require "core.config" local DocView = require "core.docview" @@ -34,12 +35,16 @@ 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 sw = self:get_font():get_width(" ") local w = math.ceil(1 * SCALE) local h = self:get_line_height() - for i = 0, spaces - 1, config.indent_size do + 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 - renderer.draw_rect(x + sw * i, y, w, h, color) + 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/plugins/language_angelscript.lua b/plugins/language_angelscript.lua index 8c39cff..d34a0eb 100644 --- a/plugins/language_angelscript.lua +++ b/plugins/language_angelscript.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_batch.lua b/plugins/language_batch.lua index 8caad59..441a367 100644 --- a/plugins/language_batch.lua +++ b/plugins/language_batch.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" -- batch syntax for lite <liqube> diff --git a/plugins/language_cmake.lua b/plugins/language_cmake.lua index 78354e1..9f4df2f 100644 --- a/plugins/language_cmake.lua +++ b/plugins/language_cmake.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_cpp.lua b/plugins/language_cpp.lua index 2b2fce5..bb1f347 100644 --- a/plugins/language_cpp.lua +++ b/plugins/language_cpp.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 pcall(require, "plugins.language_c") local syntax = require "core.syntax" @@ -11,7 +12,6 @@ syntax.add { patterns = { { pattern = "//.-\n", type = "comment" }, { pattern = { "/%*", "%*/" }, type = "comment" }, - { pattern = { "#", "[^\\]\n" }, type = "comment" }, { pattern = { '"', '"', '\\' }, type = "string" }, { pattern = { "'", "'", '\\' }, type = "string" }, { pattern = "-?0x%x+", type = "number" }, @@ -19,7 +19,7 @@ syntax.add { { pattern = "-?%.?%d+f?", type = "number" }, { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" }, { pattern = "[%a_][%w_]*%f[(]", type = "function" }, - { pattern = "[%a_][%w_]*", type = "symbol" }, + { pattern = "#[%a_][%w_]*", type = "symbol" }, }, symbols = { ["alignof"] = "keyword", @@ -87,7 +87,7 @@ syntax.add { ["continue"] = "keyword", ["return"] = "keyword", ["goto"] = "keyword", - ["struct"] = "keyword", + ["struct"] = "keyword2", ["union"] = "keyword", ["typedef"] = "keyword", ["enum"] = "keyword", @@ -117,5 +117,16 @@ syntax.add { ["char16_t"] = "keyword2", ["char32_t"] = "keyword2", ["NULL"] = "literal", + ["#include"] = "keyword", + ["#if"] = "keyword", + ["#ifdef"] = "keyword", + ["#ifndef"] = "keyword", + ["#else"] = "keyword", + ["#elseif"] = "keyword", + ["#endif"] = "keyword", + ["#define"] = "keyword", + ["#warning"] = "keyword", + ["#error"] = "keyword", + ["#pragma"] = "keyword", }, } diff --git a/plugins/language_csharp.lua b/plugins/language_csharp.lua index c40009c..b6ee8e0 100644 --- a/plugins/language_csharp.lua +++ b/plugins/language_csharp.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_d.lua b/plugins/language_d.lua index 4597943..a054de6 100644 --- a/plugins/language_d.lua +++ b/plugins/language_d.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_dart.lua b/plugins/language_dart.lua index 5083fb2..2e3cfc3 100644 --- a/plugins/language_dart.lua +++ b/plugins/language_dart.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_elixir.lua b/plugins/language_elixir.lua index f87fad9..8dd7cc9 100644 --- a/plugins/language_elixir.lua +++ b/plugins/language_elixir.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_elm.lua b/plugins/language_elm.lua index 4f449a0..c5f2223 100644 --- a/plugins/language_elm.lua +++ b/plugins/language_elm.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_fe.lua b/plugins/language_fe.lua index f97e73b..f1aeef4 100644 --- a/plugins/language_fe.lua +++ b/plugins/language_fe.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_fennel.lua b/plugins/language_fennel.lua index 7320e91..fbf1ba6 100644 --- a/plugins/language_fennel.lua +++ b/plugins/language_fennel.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 -- Support for the Fennel programming language: https://fennel-lang.org -- Covers all the keywords up to Fennel version 0.4.0 diff --git a/plugins/language_gdscript.lua b/plugins/language_gdscript.lua index e301354..c638ab9 100644 --- a/plugins/language_gdscript.lua +++ b/plugins/language_gdscript.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 -- Support for the GDScript programming language: https://godotengine.org/ -- Covers the most used keywords up to Godot version 3.2.x diff --git a/plugins/language_glsl.lua b/plugins/language_glsl.lua index da69ebd..1f57a06 100644 --- a/plugins/language_glsl.lua +++ b/plugins/language_glsl.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local style = require "core.style" local common = require "core.common" diff --git a/plugins/language_go.lua b/plugins/language_go.lua index dffbaf9..76289bd 100644 --- a/plugins/language_go.lua +++ b/plugins/language_go.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_hlsl.lua b/plugins/language_hlsl.lua index 1444ef4..45128d6 100644 --- a/plugins/language_hlsl.lua +++ b/plugins/language_hlsl.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local style = require "core.style" local common = require "core.common" diff --git a/plugins/language_hs.lua b/plugins/language_hs.lua index f0bf378..5f69a5a 100644 --- a/plugins/language_hs.lua +++ b/plugins/language_hs.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_java.lua b/plugins/language_java.lua index 1d9e12d..42ad147 100644 --- a/plugins/language_java.lua +++ b/plugins/language_java.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_jiyu.lua b/plugins/language_jiyu.lua index 1cf94dc..a433170 100644 --- a/plugins/language_jiyu.lua +++ b/plugins/language_jiyu.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_jsx.lua b/plugins/language_jsx.lua new file mode 100644 index 0000000..2648c68 --- /dev/null +++ b/plugins/language_jsx.lua @@ -0,0 +1,69 @@ +-- mod-version:1 -- lite-xl 1.16 +-- Almost identical to JS, with the exception that / shouldn't denote a regex. Current JS syntax highlighter will highlight half the document due to closing tags. +local syntax = require "core.syntax" + +syntax.add { + files = { "%.jsx$" }, + comment = "//", + patterns = { + { pattern = "//.-\n", type = "comment" }, + { pattern = { "/%*", "%*/" }, type = "comment" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = { "`", "`", '\\' }, type = "string" }, + { pattern = "0x[%da-fA-F]+", type = "number" }, + { pattern = "-?%d+[%d%.eE]*", type = "number" }, + { pattern = "-?%.?%d+", type = "number" }, + { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" }, + { pattern = "[%a_][%w_]*%f[(]", type = "function" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["async"] = "keyword", + ["await"] = "keyword", + ["break"] = "keyword", + ["case"] = "keyword", + ["catch"] = "keyword", + ["class"] = "keyword", + ["const"] = "keyword", + ["continue"] = "keyword", + ["debugger"] = "keyword", + ["default"] = "keyword", + ["delete"] = "keyword", + ["do"] = "keyword", + ["else"] = "keyword", + ["export"] = "keyword", + ["extends"] = "keyword", + ["finally"] = "keyword", + ["for"] = "keyword", + ["function"] = "keyword", + ["get"] = "keyword", + ["if"] = "keyword", + ["import"] = "keyword", + ["in"] = "keyword", + ["instanceof"] = "keyword", + ["let"] = "keyword", + ["new"] = "keyword", + ["return"] = "keyword", + ["set"] = "keyword", + ["static"] = "keyword", + ["super"] = "keyword", + ["switch"] = "keyword", + ["throw"] = "keyword", + ["try"] = "keyword", + ["typeof"] = "keyword", + ["var"] = "keyword", + ["void"] = "keyword", + ["while"] = "keyword", + ["with"] = "keyword", + ["yield"] = "keyword", + ["true"] = "literal", + ["false"] = "literal", + ["null"] = "literal", + ["undefined"] = "literal", + ["arguments"] = "keyword2", + ["Infinity"] = "keyword2", + ["NaN"] = "keyword2", + ["this"] = "keyword2", + }, +} diff --git a/plugins/language_liquid.lua b/plugins/language_liquid.lua new file mode 100644 index 0000000..5cc7573 --- /dev/null +++ b/plugins/language_liquid.lua @@ -0,0 +1,144 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +local liquid_syntax = { + patterns = { + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "-?%d+[%d%.]*f?", type = "number" }, + { pattern = "-?%.?%d+f?", type = "number" }, + { pattern = "%w+", type = "symbol" }, + }, + symbols = { + ["abs"] = "keyword2", + ["and"] = "operator", + ["append"] = "keyword2", + ["assign"] = "keyword", + ["at_least"] = "keyword2", + ["at_most"] = "keyword2", + ["break"] = "keyword", + ["camelcase"] = "keyword2", + ["capitalize"] = "keyword2", + ["capture"] = "keyword", + ["endcapture"] = "keyword", + ["case"] = "keyword", + ["ceil"] = "keyword2", + ["comment"] = "keyword", + ["endcomment"] = "keyword", + ["concat"] = "keyword2", + ["contains"] = "operator", + ["cycle"] = "keyword", + ["date"] = "keyword2", + ["decrement"] = "keyword", + ["default"] = "keyword2", + ["divided_by"] = "keyword2", + ["downcase"] = "keyword2", + ["else"] = "keyword", + ["elsif"] = "keyword", + ["false"] = "literal", + ["first"] = "keyword2", + ["floor"] = "keyword2", + ["for"] = "keyword", + ["endfor"] = "keyword", + ["forloop"] = "literal", + ["handleize"] = "keyword2", + ["handle"] = "keyword2", + ["if"] = "keyword", + ["endif"] = "keyword", + ["increment"] = "keyword", + ["index0"] = "literal", + ["index"] = "literal", + ["in"] = "operator", + ["join"] = "keyword2", + ["last"] = "keyword2", + ["length"] = "literal", + ["limit"] = "keyword", + ["lstrip"] = "keyword", + ["map"] = "keyword2", + ["minus"] = "keyword2", + ["modulo"] = "keyword2", + ["nil"] = "literal", + ["null"] = "literal", + ["offset"] = "keyword2", + ["or"] = "operator", + ["pluralize"] = "keyword2", + ["plus"] = "keyword2", + ["prepend"] = "keyword2", + ["raw"] = "keyword", + ["endraw"] = "keyword", + ["removefirst"] = "keyword2", + ["remove"] = "keyword2", + ["replacefirst"] = "keyword2", + ["replace"] = "keyword2", + ["reversed"] = "operator", + ["reverse"] = "keyword2", + ["rindex0"] = "literal", + ["rindex"] = "literal", + ["round"] = "keyword2", + ["rstrip"] = "keyword2", + ["size"] = "keyword2", + ["slice"] = "keyword2", + ["sort"] = "keyword2", + ["split"] = "keyword2", + ["strip"] = "keyword2", + ["strip_newlines"] = "keyword2", + ["times"] = "keyword2", + ["true"] = "literal", + ["truncate"] = "keyword2", + ["truncatewords"] = "keyword2", + ["uniq"] = "keyword2", + ["unless"] = "keyword", + ["endunless"] = "keyword", + ["upcase"] = "keyword2", + ["when"] = "keyword", + ["where"] = "keyword2" + + }, +} + +syntax.add { + files = { "%.liquid?$" }, + patterns = { + { pattern = { "{%%", "%%}" }, syntax = liquid_syntax, type = "function" }, + { pattern = { "{{", "}}" }, syntax = liquid_syntax, type = "function" }, + { + pattern = { + "<%s*[sS][cC][rR][iI][pP][tT]%s+[tT][yY][pP][eE]%s*=%s*" .. + "['\"]%a+/[jJ][aA][vV][aA][sS][cC][rR][iI][pP][tT]['\"]%s*>", + "<%s*/[sS][cC][rR][iI][pP][tT]>" + }, + syntax = ".js", + type = "function" + }, + { + pattern = { + "<%s*[sS][cC][rR][iI][pP][tT]%s*>", + "<%s*/%s*[sS][cC][rR][iI][pP][tT]>" + }, + syntax = ".js", + type = "function" + }, + { + pattern = { + "<%s*[sS][tT][yY][lL][eE][^>]*>", + "<%s*/%s*[sS][tT][yY][lL][eE]%s*>" + }, + syntax = ".css", + type = "function" + }, + { pattern = { "<!%-%-", "%-%->" }, type = "comment" }, + { pattern = { '%f[^>][^<]', '%f[<{]' }, type = "normal" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "0x[%da-fA-F]+", type = "number" }, + { pattern = "-?%d+[%d%.]*f?", type = "number" }, + { pattern = "-?%.?%d+f?", type = "number" }, + { pattern = "%f[^<]![%a_][%w_]*", type = "keyword2" }, + { pattern = "%f[^<][%a_][%w_]*", type = "function" }, + { pattern = "%f[^<]/[%a_][%w_]*", type = "function" }, + { pattern = "[%a_][%w_]*", type = "keyword" }, + { pattern = "[/<>=]", type = "operator" } + }, + symbols = {}, +} + diff --git a/plugins/language_make.lua b/plugins/language_make.lua index f586a05..21e9df0 100644 --- a/plugins/language_make.lua +++ b/plugins/language_make.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_meson.lua b/plugins/language_meson.lua index ab6be17..c1aa4b1 100644 --- a/plugins/language_meson.lua +++ b/plugins/language_meson.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { @@ -5,7 +6,6 @@ syntax.add { comment = "#", patterns = { { pattern = { "#", "\n" }, type = "comment" }, - { pattern = { '"', '"', '\\' }, type = "string" }, { pattern = { "'", "'", '\\' }, type = "string" }, { pattern = { "'''", "'''" }, type = "string" }, { pattern = "0x[%da-fA-F]+", type = "number" }, diff --git a/plugins/language_moon.lua b/plugins/language_moon.lua index 4817743..ef8d3bd 100644 --- a/plugins/language_moon.lua +++ b/plugins/language_moon.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_nim.lua b/plugins/language_nim.lua index af230e4..d42cb4a 100644 --- a/plugins/language_nim.lua +++ b/plugins/language_nim.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" local patterns = {} diff --git a/plugins/language_objc.lua b/plugins/language_objc.lua index 221e5c3..c2b2eee 100644 --- a/plugins/language_objc.lua +++ b/plugins/language_objc.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_odin.lua b/plugins/language_odin.lua index c3413f2..52a24e0 100644 --- a/plugins/language_odin.lua +++ b/plugins/language_odin.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_perl.lua b/plugins/language_perl.lua new file mode 100644 index 0000000..1332464 --- /dev/null +++ b/plugins/language_perl.lua @@ -0,0 +1,259 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "%.pm$", "%.pl$" }, + headers = "^#!.*[ /]perl", + comment = "#", + patterns = { + { pattern = "%#.-\n", type = "comment" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + -- until we can get this workign with s///, just don't do any of them. + -- { pattern = { '/', '/', '\\' }, type = "string" }, + { pattern = "-?%d+[%d%.eE]*", type = "number" }, + { pattern = "-?%.?%d+", type = "number" }, + { pattern = "[%a_][%w_]*%f[(]", type = "function" }, + { pattern = "[%@%$%*]+[%a_][%w_]*", type = "keyword2" }, + { pattern = "%--[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["-A"] = "keyword", + ["END"] = "keyword", + ["length"] = "keyword", + ["setpgrp"] = "keyword", + ["-B"] = "keyword", + ["endgrent"] = "keyword", + ["link"] = "keyword", + ["setpriority"] = "keyword", + ["-b"] = "keyword", + ["endhostent"] = "keyword", + ["listen"] = "keyword", + ["setprotoent"] = "keyword", + ["-C"] = "keyword", + ["endnetent"] = "keyword", + ["local"] = "keyword", + ["setpwent"] = "keyword", + ["-c"] = "keyword", + ["endprotoent"] = "keyword", + ["localtime"] = "keyword", + ["setservent"] = "keyword", + ["-d"] = "keyword", + ["endpwent"] = "keyword", + ["log"] = "keyword", + ["setsockopt"] = "keyword", + ["-e"] = "keyword", + ["endservent"] = "keyword", + ["lstat"] = "keyword", + ["shift"] = "keyword", + ["-f"] = "keyword", + ["eof$"] = "keyword", + ["map"] = "keyword", + ["shmctl"] = "keyword", + ["-g"] = "keyword", + ["eval"] = "keyword", + ["mkdir"] = "keyword", + ["shmget"] = "keyword", + ["-k"] = "keyword", + ["exec"] = "keyword", + ["msgctl"] = "keyword", + ["shmread"] = "keyword", + ["-l"] = "keyword", + ["exists"] = "keyword", + ["msgget"] = "keyword", + ["shmwrite"] = "keyword", + ["-M"] = "keyword", + ["exit"] = "keyword", + ["msgrcv"] = "keyword", + ["shutdown"] = "keyword", + ["-O"] = "keyword", + ["fcntl"] = "keyword", + ["msgsnd"] = "keyword", + ["sin"] = "keyword", + ["-o"] = "keyword", + ["fileno"] = "keyword", + ["my"] = "keyword", + ["sleep"] = "keyword", + ["-p"] = "keyword", + ["flock"] = "keyword", + ["next"] = "keyword", + ["socket"] = "keyword", + ["package"] = "keyword", + ["-r"] = "keyword", + ["fork"] = "keyword", + ["not"] = "keyword", + ["socketpair"] = "keyword", + ["-R"] = "keyword", + ["format"] = "keyword", + ["oct"] = "keyword", + ["sort"] = "keyword", + ["-S"] = "keyword", + ["formline"] = "keyword", + ["open"] = "keyword", + ["splice"] = "keyword", + ["-s"] = "keyword", + ["getc"] = "keyword", + ["opendir"] = "keyword", + ["split"] = "keyword", + ["-T"] = "keyword", + ["getgrent"] = "keyword", + ["ord"] = "keyword", + ["sprintf"] = "keyword", + ["-t"] = "keyword", + ["getgrgid"] = "keyword", + ["our"] = "keyword", + ["sqrt"] = "keyword", + ["-u"] = "keyword", + ["getgrnam"] = "keyword", + ["pack"] = "keyword", + ["srand"] = "keyword", + ["-w"] = "keyword", + ["gethostbyaddr"] = "keyword", + ["pipe"] = "keyword", + ["stat"] = "keyword", + ["-W"] = "keyword", + ["gethostbyname"] = "keyword", + ["pop"] = "keyword", + ["state"] = "keyword", + ["-X"] = "keyword", + ["gethostent"] = "keyword", + ["pos"] = "keyword", + ["study"] = "keyword", + ["-x"] = "keyword", + ["getlogin"] = "keyword", + ["print"] = "keyword", + ["substr"] = "keyword", + ["-z"] = "keyword", + ["getnetbyaddr"] = "keyword", + ["printf"] = "keyword", + ["symlink"] = "keyword", + ["abs"] = "keyword", + ["getnetbyname"] = "keyword", + ["prototype"] = "keyword", + ["syscall"] = "keyword", + ["accept"] = "keyword", + ["getnetent"] = "keyword", + ["push"] = "keyword", + ["sysopen"] = "keyword", + ["alarm"] = "keyword", + ["getpeername"] = "keyword", + ["quotemeta"] = "keyword", + ["sysread"] = "keyword", + ["atan2"] = "keyword", + ["getpgrp"] = "keyword", + ["rand"] = "keyword", + ["sysseek"] = "keyword", + ["AUTOLOAD"] = "keyword", + ["getppid"] = "keyword", + ["read"] = "keyword", + ["system"] = "keyword", + ["BEGIN"] = "keyword", + ["getpriority"] = "keyword", + ["readdir"] = "keyword", + ["syswrite"] = "keyword", + ["bind"] = "keyword", + ["getprotobyname"] = "keyword", + ["readline"] = "keyword", + ["tell"] = "keyword", + ["binmode"] = "keyword", + ["getprotobynumber"] = "keyword", + ["SUPER"] = "keyword", + ["readlink"] = "keyword", + ["telldir"] = "keyword", + ["bless"] = "keyword", + ["sub"] = "keyword", + ["getprotoent"] = "keyword", + ["readpipe"] = "keyword", + ["tie"] = "keyword", + ["getpwent"] = "keyword", + ["recv"] = "keyword", + ["tied"] = "keyword", + ["caller"] = "keyword", + ["getpwnam"] = "keyword", + ["redo"] = "keyword", + ["time"] = "keyword", + ["chdir"] = "keyword", + ["getpwuid"] = "keyword", + ["ref"] = "keyword", + ["times"] = "keyword", + ["CHECK"] = "keyword", + ["getservbyname"] = "keyword", + ["rename"] = "keyword", + ["truncate"] = "keyword", + ["chmod"] = "keyword", + ["getservbyport"] = "keyword", + ["require"] = "keyword", + ["uc"] = "keyword", + ["chomp"] = "keyword", + ["getservent"] = "keyword", + ["reset"] = "keyword", + ["ucfirst"] = "keyword", + ["chop"] = "keyword", + ["getsockname"] = "keyword", + ["return"] = "keyword", + ["umask"] = "keyword", + ["chown"] = "keyword", + ["getsockopt"] = "keyword", + ["reverse"] = "keyword", + ["undef"] = "keyword", + ["chr"] = "keyword", + ["glob"] = "keyword", + ["rewinddir"] = "keyword", + ["UNITCHECK"] = "keyword", + ["chroot"] = "keyword", + ["gmtime"] = "keyword", + ["rindex"] = "keyword", + ["unlink"] = "keyword", + ["close"] = "keyword", + ["goto"] = "keyword", + ["rmdir"] = "keyword", + ["unpack"] = "keyword", + ["closedir"] = "keyword", + ["grep"] = "keyword", + ["say"] = "keyword", + ["unshift"] = "keyword", + ["connect"] = "keyword", + ["hex"] = "keyword", + ["scalar"] = "keyword", + ["untie"] = "keyword", + ["cos"] = "keyword", + ["index"] = "keyword", + ["seek"] = "keyword", + ["use"] = "keyword", + ["crypt"] = "keyword", + ["INIT"] = "keyword", + ["seekdir"] = "keyword", + ["utime"] = "keyword", + ["dbmclose"] = "keyword", + ["int"] = "keyword", + ["select"] = "keyword", + ["values"] = "keyword", + ["dbmopen"] = "keyword", + ["ioctl"] = "keyword", + ["semctl"] = "keyword", + ["vec"] = "keyword", + ["defined"] = "keyword", + ["join"] = "keyword", + ["semget"] = "keyword", + ["wait"] = "keyword", + ["delete"] = "keyword", + ["keys"] = "keyword", + ["semop"] = "keyword", + ["waitpid"] = "keyword", + ["DESTROY"] = "keyword", + ["kill"] = "keyword", + ["send"] = "keyword", + ["wantarray"] = "keyword", + ["die"] = "keyword", + ["last"] = "keyword", + ["setgrent"] = "keyword", + ["warn"] = "keyword", + ["dump"] = "keyword", + ["lc"] = "keyword", + ["sethostent"] = "keyword", + ["write"] = "keyword", + ["each"] = "keyword", + ["lcfirst"] = "keyword", + ["setnetent"] = "keyword" + } +} diff --git a/plugins/language_php.lua b/plugins/language_php.lua index d6ed516..0db81a3 100644 --- a/plugins/language_php.lua +++ b/plugins/language_php.lua @@ -1,99 +1,70 @@ +-- mod-version:1 -- lite-xl 1.16 +--[[ + language_php.lua + provides php syntax support allowing mixed html, css and js + version: 20210513_144200 + + Depends on plugin language_phps.lua version >= 20210512_181200 +--]] local syntax = require "core.syntax" syntax.add { files = { "%.php$", "%.phtml" }, - headers = "^<%?php", - comment = "//", patterns = { - { pattern = "//.-\n", type = "comment" }, - { pattern = "#.-\n", type = "comment" }, - { pattern = { "/%*", "%*/" }, type = "comment" }, - -- I dont know why the '//' are needed but I leave it here for now - { pattern = { '"', '"', '\\' }, type = "string" }, - { pattern = { "'", "'", '\\' }, type = "string" }, - { pattern = "%\\x[%da-fA-F]+", type = "number" }, - { pattern = "-?%d+[%d%.eE]*", type = "number" }, - { pattern = "-?%.?%d+", type = "number" }, - { pattern = "[%.%+%-=/%*%^%%<>!~|&]", type = "operator" }, - { pattern = "[%a_][%w_]*%f[(]", type = "function" }, - { pattern = "[%a_][%w_]*", type = "symbol" }, - -- To indicate variables. - { pattern = "%$", type = "operator" }, - }, - symbols = { - ["return"] = "keyword", - ["if"] = "keyword", - ["else"] = "keyword", - ["elseif"] = "keyword", - ["endif"] = "keyword", - ["declare"] = "keyword", - ["enddeclare"] = "keyword", - ["switch"] = "keyword", - ["endswitch"] = "keyword", - ["as"] = "keyword", - ["do"] = "keyword", - ["for"] = "keyword", - ["endfor"] = "keyword", - ["foreach"] = "keyword", - ["endforeach"] = "keyword", - ["while"] = "keyword", - ["endwhile"] = "keyword", - ["switch"] = "keyword", - ["case"] = "keyword", - ["continue"] = "keyword", - ["default"] = "keyword", - ["break"] = "keyword", - ["exit"] = "keyword", - ["goto"] = "keyword", - - ["catch"] = "keyword", - ["throw"] = "keyword", - ["try"] = "keyword", - ["finally"] = "keyword", - - ["class"] = "keyword", - ["trait"] = "keyword", - ["interface"] = "keyword", - ["public"] = "keyword", - ["static"] = "keyword", - ["protected"] = "keyword", - ["private"] = "keyword", - ["abstract"] = "keyword", - ["final"] = "keyword", - - ["function"] = "keyword2", - ["global"] = "keyword2", - ["var"] = "keyword2", - ["const"] = "keyword2", - ["bool"] = "keyword2", - ["boolean"] = "keyword2", - ["int"] = "keyword2", - ["integer"] = "keyword2", - ["real"] = "keyword2", - ["double"] = "keyword2", - ["float"] = "keyword2", - ["string"] = "keyword2", - ["array"] = "keyword2", - ["object"] = "keyword2", - ["callable"] = "keyword2", - ["iterable"] = "keyword2", - - ["namespace"] = "keyword2", - ["extends"] = "keyword2", - ["implements"] = "keyword2", - ["instanceof"] = "keyword2", - ["require"] = "keyword2", - ["require_once"] = "keyword2", - ["include"] = "keyword2", - ["include_once"] = "keyword2", - ["use"] = "keyword2", - ["new"] = "keyword2", - ["clone"] = "keyword2", - - ["true"] = "literal", - ["false"] = "literal", - ["NULL"] = "literal", - ["parent"] = "literal", - ["self"] = "literal", + { + pattern = { + "<%?php%s+", + "%?>" + }, + syntax = ".phps", + type = "keyword2" + }, + { + pattern = { + "<%?=?", + "%?>" + }, + syntax = ".phps", + type = "keyword2" + }, + { + pattern = { + "<%s*[sS][cC][rR][iI][pP][tT]%s+[tT][yY][pP][eE]%s*=%s*" .. + "['\"]%a+/[jJ][aA][vV][aA][sS][cC][rR][iI][pP][tT]['\"]%s*>", + "<%s*/[sS][cC][rR][iI][pP][tT]>" + }, + syntax = ".js", + type = "function" + }, + { + pattern = { + "<%s*[sS][cC][rR][iI][pP][tT]%s*>", + "<%s*/%s*[sS][cC][rR][iI][pP][tT]>" + }, + syntax = ".js", + type = "function" + }, + { + pattern = { + "<%s*[sS][tT][yY][lL][eE][^>]*>", + "<%s*/%s*[sS][tT][yY][lL][eE]%s*>" + }, + syntax = ".css", + type = "function" + }, + { pattern = { "<!%-%-", "%-%->" }, type = "comment" }, + { pattern = { '%f[^>][^<]', '%f[<]' }, type = "normal" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "0x[%da-fA-F]+", type = "number" }, + { pattern = "-?%d+[%d%.]*f?", type = "number" }, + { pattern = "-?%.?%d+f?", type = "number" }, + { pattern = "%f[^<]![%a_][%w_]*", type = "keyword2" }, + { pattern = "%f[^<][%a_][%w_]*", type = "function" }, + { pattern = "%f[^<]/[%a_][%w_]*", type = "function" }, + { pattern = "[%a_][%w_]*", type = "keyword" }, + { pattern = "[/<>=]", type = "operator" }, }, + symbols = {}, } + diff --git a/plugins/language_phps.lua b/plugins/language_phps.lua new file mode 100644 index 0000000..7476a8f --- /dev/null +++ b/plugins/language_phps.lua @@ -0,0 +1,140 @@ +-- mod-version:1 -- lite-xl 1.16 +--[[ + language_phps.lua + complement to language_php.lua providing the php syntax support + version: 20210512_181200 +--]] +local syntax = require "core.syntax" + +syntax.add { + files = { "%.phps$" }, + headers = "^<%?php", + comment = "//", + patterns = { + -- Attributes + { pattern = {"#%[", "%]"}, type = "normal" }, + -- Comments + { pattern = "//.-\n", type = "comment" }, + { pattern = "#.-\n", type = "comment" }, + { pattern = { "/%*", "%*/" }, type = "comment" }, + -- The '\\' is for escaping to work on " or ' + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "0[bB][%d]+", type = "number" }, + { pattern = "0[xX][%da-fA-F]+", type = "number" }, + { pattern = "-?%d[%d_%.eE]*", type = "number" }, + { pattern = "-?%.?%d+", type = "number" }, + { pattern = "[%.%+%-=/%*%^%%<>!~|&%?:]", type = "operator" }, + -- Variables + { pattern = "%$[%w_]+", type = "keyword2" }, + -- Respect control structures, treat as keyword not function + { pattern = "if[%s]*%f[(]", type = "keyword" }, + { pattern = "else[%s]*%f[(]", type = "keyword" }, + { pattern = "elseif[%s]*%f[(]", type = "keyword" }, + { pattern = "for[%s]*%f[(]", type = "keyword" }, + { pattern = "foreach[%s]*%f[(]", type = "keyword" }, + { pattern = "while[%s]*%f[(]", type = "keyword" }, + { pattern = "catch[%s]*%f[(]", type = "keyword" }, + { pattern = "switch[%s]*%f[(]", type = "keyword" }, + { pattern = "match[%s]*%f[(]", type = "keyword" }, + { pattern = "fn[%s]*%f[(]", type = "keyword" }, + -- All functions that aren't control structures + { pattern = "[%a_][%w_]*[%s]*%f[(]", type = "function" }, + -- Array type hint not added on symbols to also make it work + -- as a function call + { pattern = "array", type = "literal" }, + -- Match static or namespace container on sub element access + { pattern = "[%a_][%w_]*[%s]*%f[:]", type = "literal" }, + -- Uppercase constants of at least 3 characters in len + { pattern = "%u[%u_][%u%d_]+", type = "number" }, + -- Magic constants + { pattern = "__[%u]+__", type = "number" }, + -- Everything else + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["return"] = "keyword", + ["if"] = "keyword", + ["else"] = "keyword", + ["elseif"] = "keyword", + ["endif"] = "keyword", + ["declare"] = "keyword", + ["enddeclare"] = "keyword", + ["switch"] = "keyword", + ["endswitch"] = "keyword", + ["as"] = "keyword", + ["do"] = "keyword", + ["for"] = "keyword", + ["endfor"] = "keyword", + ["foreach"] = "keyword", + ["endforeach"] = "keyword", + ["while"] = "keyword", + ["endwhile"] = "keyword", + ["switch"] = "keyword", + ["match"] = "keyword", + ["case"] = "keyword", + ["continue"] = "keyword", + ["default"] = "keyword", + ["break"] = "keyword", + ["goto"] = "keyword", + + ["try"] = "keyword", + ["catch"] = "keyword", + ["throw"] = "keyword", + ["finally"] = "keyword", + + ["class"] = "keyword", + ["trait"] = "keyword", + ["interface"] = "keyword", + ["public"] = "keyword", + ["static"] = "keyword", + ["protected"] = "keyword", + ["private"] = "keyword", + ["abstract"] = "keyword", + ["final"] = "keyword", + ["$this"] = "literal", + + ["function"] = "keyword", + ["fn"] = "keyword", + ["global"] = "keyword", + ["var"] = "keyword", + ["const"] = "keyword", + + ["bool"] = "literal", + ["boolean"] = "literal", + ["int"] = "literal", + ["integer"] = "literal", + ["real"] = "literal", + ["double"] = "literal", + ["float"] = "literal", + ["string"] = "literal", + ["object"] = "literal", + ["callable"] = "literal", + ["iterable"] = "literal", + ["void"] = "literal", + ["parent"] = "literal", + ["self"] = "literal", + ["mixed"] = "literal", + + ["namespace"] = "keyword", + ["extends"] = "keyword", + ["implements"] = "keyword", + ["instanceof"] = "keyword", + ["require"] = "keyword", + ["require_once"] = "keyword", + ["include"] = "keyword", + ["include_once"] = "keyword", + ["use"] = "keyword", + ["new"] = "keyword", + ["clone"] = "keyword", + + ["true"] = "number", + ["false"] = "number", + ["NULL"] = "number", + ["null"] = "number", + + ["print"] = "function", + ["echo"] = "function", + ["exit"] = "function", + }, +} diff --git a/plugins/language_pico8.lua b/plugins/language_pico8.lua index 8edf92f..c8ba027 100644 --- a/plugins/language_pico8.lua +++ b/plugins/language_pico8.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_powershell.lua b/plugins/language_powershell.lua index 01c00f4..6cd0968 100644 --- a/plugins/language_powershell.lua +++ b/plugins/language_powershell.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax"
syntax.add {
diff --git a/plugins/language_psql.lua b/plugins/language_psql.lua index 7c6c4b7..389f32a 100644 --- a/plugins/language_psql.lua +++ b/plugins/language_psql.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" -- In sql symbols can be lower case and upper case diff --git a/plugins/language_ruby.lua b/plugins/language_ruby.lua new file mode 100644 index 0000000..9661b1b --- /dev/null +++ b/plugins/language_ruby.lua @@ -0,0 +1,74 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "%.rb", "%.gemspec" }, + headers = "^#!.*[ /]ruby", + comment = "#", + patterns = { + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "-?0x%x+", type = "number" }, + { pattern = "%#.-\n", type = "comment" }, + { pattern = "-?%d+[%d%.eE]*f?", type = "number" }, + { pattern = "-?%.?%d+f?", type = "number" }, + { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" }, + { pattern = "[%a_][%w_]*%f[(]", type = "function" }, + { pattern = "@?@[%a_][%w_]*", type = "keyword2" }, + { pattern = "::[%w_]*", type = "symbol" }, + { pattern = ":[%w_]*", type = "keyword2" }, + { pattern = "[%a_][%w_]*:[^:]", type = "keyword2" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["nil"] = "literal", + ["end"] = "literal", + ["true"] = "literal", + ["false"] = "literal", + ["private"] = "keyword", + ["extend"] = "keyword", + ["include"] = "keyword", + ["require"] = "keyword", + ["require_dependency"] = "keyword", + ["__ENCODING__"] = "keyword", + ["__LINE__"] = "keyword", + ["__FILE__"] = "keyword", + ["BEGIN"] = "keyword", + ["END"] = "keyword", + ["alias"] = "keyword", + ["and"] = "keyword", + ["begin"] = "keyword", + ["break"] = "keyword", + ["case"] = "keyword", + ["class"] = "keyword", + ["def"] = "keyword", + ["defined?"] = "keyword", + ["do"] = "keyword", + ["else"] = "keyword", + ["elsif"] = "keyword", + ["end"] = "keyword", + ["ensure"] = "keyword", + ["for"] = "keyword", + ["if"] = "keyword", + ["in"] = "keyword", + ["module"] = "keyword", + ["next"] = "keyword", + ["not"] = "keyword", + ["or"] = "keyword", + ["redo"] = "keyword", + ["rescue"] = "keyword", + ["retry"] = "keyword", + ["return"] = "keyword", + ["self"] = "keyword", + ["super"] = "keyword", + ["then"] = "keyword", + ["true"] = "keyword", + ["undef"] = "keyword", + ["unless"] = "keyword", + ["until"] = "keyword", + ["when"] = "keyword", + ["while"] = "keyword", + ["yield"] = "keyword" + }, +} + diff --git a/plugins/language_rust.lua b/plugins/language_rust.lua index 37ba81f..4d0fef1 100644 --- a/plugins/language_rust.lua +++ b/plugins/language_rust.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_sass.lua b/plugins/language_sass.lua new file mode 100644 index 0000000..ce4aa2b --- /dev/null +++ b/plugins/language_sass.lua @@ -0,0 +1,46 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "%.sass$" }, + comment = "//", + patterns = { + { pattern = "/[/%*].-\n", type = "comment" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "$%w+", type = "keyword" }, + { pattern = "@%w+", type = "literal" }, + { pattern = "[#,]%w+", type = "function" }, + { pattern = "&", type = "keyword2" }, + { pattern = "[:%/%*%-]", type = "operator" }, + { pattern = "[%a][%w-]*%s*%f[:]", type = "keyword2" }, + { pattern = "-?%d+[%d%.]*p[xt]", type = "number" }, + { pattern = "-?%d+[%d%.]*deg", type = "number" }, + { pattern = "-?%d+[%d%.]*[s%%]", type = "number" }, + { pattern = "-?%d+[%d%.]*", type = "number" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["transparent"] = "literal", + ["none"] = "literal", + ["absolute"] = "literal", + ["relative"] = "literal", + ["solid"] = "literal", + ["flex"] = "literal", + ["flex-start"] = "literal", + ["flex-end"] = "literal", + ["row"] = "literal", + ["center"] = "literal", + ["column"] = "literal", + ["pointer"] = "literal", + ["ease"] = "literal", + ["white"] = "function", + ["black"] = "function", + ["gray"] = "function", + ["blue"] = "function", + ["red"] = "function", + ["purple"] = "function", + ["green"] = "function", + ["yellow"] = "function" + } +} diff --git a/plugins/language_sh.lua b/plugins/language_sh.lua index c4153c2..684b070 100644 --- a/plugins/language_sh.lua +++ b/plugins/language_sh.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { @@ -13,7 +14,7 @@ syntax.add { { pattern = "%f[%w_][%d%.]+%f[^%w_]", type = "number" }, { pattern = "[!<>|&%[%]=*]", type = "operator" }, { pattern = "%f[%S]%-[%w%-_]+", type = "function" }, - { pattern = "${.*}", type = "keyword2" }, + { pattern = "${.-}", type = "keyword2" }, { pattern = "$[%a_@*][%w_]*", type = "keyword2" }, { pattern = "[%a_][%w_]*", type = "symbol" }, }, diff --git a/plugins/language_teal.lua b/plugins/language_teal.lua index 8ab4c33..5b46fd8 100644 --- a/plugins/language_teal.lua +++ b/plugins/language_teal.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_tex.lua b/plugins/language_tex.lua index eced489..3f9a5fa 100644 --- a/plugins/language_tex.lua +++ b/plugins/language_tex.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_wren.lua b/plugins/language_wren.lua index ccd53db..62ee24f 100644 --- a/plugins/language_wren.lua +++ b/plugins/language_wren.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/plugins/language_zig.lua b/plugins/language_zig.lua new file mode 100644 index 0000000..2c098af --- /dev/null +++ b/plugins/language_zig.lua @@ -0,0 +1,211 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "%.zig$" }, + comment = "//", + patterns = { + { pattern = "//.-\n", type = "comment" }, + { pattern = "#!.-\n", type = "comment" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "-?[iuf][%d_]+", type = "keyword2" }, + { pattern = "-?\\x[%x_]+", type = "number" }, + { pattern = "-?\\u{[%x_]+}", type = "number" }, + { pattern = "-?%d+[%d%.eE]*f?", type = "number" }, + { pattern = "-?%.?%d+f?", type = "number" }, + { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" }, + { pattern = "[%a_][%w_]*%f[(]", type = "function" }, + { pattern = "@?[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["fn"] = "keyword", + + ["asm"] = "keyword", + ["volatile"] = "keyword", + + ["continue"] = "keyword", + ["break"] = "keyword", + ["switch"] = "keyword", + ["for"] = "keyword", + ["while"] = "keyword", + + ["var"] = "keyword", + ["anytype"] = "keyword", + ["const"] = "keyword", + ["test"] = "keyword", + ["packed"] = "keyword", + ["extern"] = "keyword", + ["export"] = "keyword", + ["pub"] = "keyword", + ["defer"] = "keyword", + ["errdefer"] = "keyword", + ["align"] = "keyword", + ["usingnamespace"] = "keyword", + + ["noasync"] = "keyword", + ["async"] = "keyword", + ["await"] = "keyword", + ["cancel"] = "keyword", + ["suspend"] = "keyword", + ["resume"] = "keyword", + + ["threadlocal"] = "keyword", + + ["linksection"] = "keyword", + + ["callconv"] = "keyword", + + ["try"] = "keyword", + ["catch"] = "keyword", + ["orelse"] = "keyword", + ["unreachable"] = "keyword", + ["noreturn"] = "keyword", + ["error"] = "keyword", + ["if"] = "keyword", + ["else"] = "keyword", + ["return"] = "keyword", + ["comptime"] = "keyword", + + ["stdcallcc"] = "keyword", + ["ccc"] = "keyword", + ["nakedcc"] = "keyword", + + ["and"] = "keyword", + ["or"] = "keyword", + + -- std + ["@import"] = "keyword", + ["@cImport"] = "keyword", + + [ "@addWithOverflow" ] = "function", + [ "@alignCast" ] = "function", + [ "@alignOf" ] = "function", + [ "@as" ] = "function", + [ "@asyncCall" ] = "function", + [ "@atomicLoad" ] = "function", + [ "@atomicRmw" ] = "function", + [ "@atomicStore" ] = "function", + [ "@bitCast" ] = "function", + [ "@bitOffsetOf" ] = "function", + [ "@boolToInt" ] = "function", + [ "@bitSizeOf" ] = "function", + [ "@breakpoint" ] = "function", + [ "@mulAdd" ] = "function", + [ "@byteSwap" ] = "function", + [ "@bitReverse" ] = "function", + [ "@byteOffsetOf" ] = "function", + [ "@call" ] = "function", + [ "@cDefine" ] = "function", + [ "@cImport" ] = "function", + [ "@cInclude" ] = "function", + [ "@clz" ] = "function", + [ "@cmpxchgStrong" ] = "function", + [ "@cmpxchgWeak" ] = "function", + [ "@compileError" ] = "function", + [ "@compileLog" ] = "function", + [ "@ctz" ] = "function", + [ "@cUndef" ] = "function", + [ "@divExact" ] = "function", + [ "@divFloor" ] = "function", + [ "@divTrunc" ] = "function", + [ "@embedFile" ] = "function", + [ "@enumToInt" ] = "function", + [ "@errorName" ] = "function", + [ "@errorReturnTrace" ] = "function", + [ "@errorToInt" ] = "function", + [ "@errSetCast" ] = "function", + [ "@export" ] = "function", + [ "@fence" ] = "function", + [ "@field" ] = "function", + [ "@fieldParentPtr" ] = "function", + [ "@floatCast" ] = "function", + [ "@floatToInt" ] = "function", + [ "@Frame" ] = "function", + [ "@frame" ] = "function", + [ "@frameAddress" ] = "function", + [ "@frameSize" ] = "function", + [ "@hasDecl" ] = "function", + [ "@hasField" ] = "function", + [ "@import" ] = "function", + [ "@intCast" ] = "function", + [ "@intToEnum" ] = "function", + [ "@intToError" ] = "function", + [ "@intToFloat" ] = "function", + [ "@intToPtr" ] = "function", + [ "@memcpy" ] = "function", + [ "@memset" ] = "function", + [ "@wasmMemorySize" ] = "function", + [ "@wasmMemoryGrow" ] = "function", + [ "@mod" ] = "function", + [ "@mulWithOverflow" ] = "function", + [ "@panic" ] = "function", + [ "@popCount" ] = "function", + [ "@ptrCast" ] = "function", + [ "@ptrToInt" ] = "function", + [ "@rem" ] = "function", + [ "@returnAddress" ] = "function", + [ "@setAlignStack" ] = "function", + [ "@setCold" ] = "function", + [ "@setEvalBranchQuota" ] = "function", + [ "@setFloatMode" ] = "function", + [ "@setRuntimeSafety" ] = "function", + [ "@shlExact" ] = "function", + [ "@shlWithOverflow" ] = "function", + [ "@shrExact" ] = "function", + [ "@shuffle" ] = "function", + [ "@sizeOf" ] = "function", + [ "@splat" ] = "function", + [ "@src" ] = "function", + [ "@sqrt" ] = "function", + [ "@sin" ] = "function", + [ "@cos" ] = "function", + [ "@exp" ] = "function", + [ "@exp2" ] = "function", + [ "@log" ] = "function", + [ "@log2" ] = "function", + [ "@log10" ] = "function", + [ "@fabs" ] = "function", + [ "@floor" ] = "function", + [ "@ceil" ] = "function", + [ "@trunc" ] = "function", + [ "@round" ] = "function", + [ "@subWithOverflow" ] = "function", + [ "@tagName" ] = "function", + [ "@TagType" ] = "function", + [ "@This" ] = "function", + [ "@truncate" ] = "function", + [ "@Type" ] = "function", + [ "@typeInfo" ] = "function", + [ "@typeName" ] = "function", + [ "@TypeOf" ] = "function", + [ "@unionInit" ] = "function", + + -- types + ["void"] = "keyword2", + ["c_void"] = "keyword2", + ["isize"] = "keyword2", + ["usize"] = "keyword2", + ["c_short"] = "keyword2", + ["c_ushort"] = "keyword2", + ["c_int"] = "keyword2", + ["c_uint"] = "keyword2", + ["c_long"] = "keyword2", + ["c_ulong"] = "keyword2", + ["c_longlong"] = "keyword2", + ["c_ulonglong"] = "keyword2", + ["c_longdouble"] = "keyword2", + ["bool"] = "keyword2", + + ["noreturn"] = "keyword2", + ["type"] = "keyword2", + ["anyerror"] = "keyword2", + ["comptime_int"] = "keyword2", + ["comptime_float"] = "keyword2", + + ["true"] = "literal", + ["false"] = "literal", + ["null"] = "literal", + ["undefined"] = "literal", + }, +} diff --git a/plugins/lastproject.lua b/plugins/lastproject.lua deleted file mode 100644 index 5fb23bd..0000000 --- a/plugins/lastproject.lua +++ /dev/null @@ -1,29 +0,0 @@ -local core = require "core" - -local last_project_filename = EXEDIR .. PATHSEP .. ".lite_last_project" - - --- load last project path -local fp = io.open(last_project_filename) -local project_path -if fp then - project_path = fp:read("*a") - fp:close() -end - - --- save current project path -local fp = io.open(last_project_filename, "w") -if nil ~= fp then - fp:write(system.absolute_path ".") - fp:close() -end - - --- restart using last project path if we had no commandline arguments and could --- find a last-project file -if #ARGS == 1 and project_path then - system.exec(string.format("%s %q", EXEFILE, project_path)) - core.quit(true) -end - diff --git a/plugins/lfautoinsert.lua b/plugins/lfautoinsert.lua index 0ea7b9d..99f7e45 100644 --- a/plugins/lfautoinsert.lua +++ b/plugins/lfautoinsert.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local config = require "core.config" @@ -18,6 +19,7 @@ config.lfautoinsert_map = { ["%f[%w]repeat%s*\n"] = "until", ["%f[%w]function.*%)%s*\n"] = "end", ["^%s*<([^/][^%s>]*)[^>]*>%s*\n"] = "</$TEXT>", + ["/%*%s*\n"] = "*/", } diff --git a/plugins/linecopypaste.lua b/plugins/linecopypaste.lua index eb6f375..a4a5e60 100755 --- a/plugins/linecopypaste.lua +++ b/plugins/linecopypaste.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16
local core = require "core"
local command = require "core.command"
diff --git a/plugins/lineguide.lua b/plugins/lineguide.lua index fc24567..2cf0b42 100644 --- a/plugins/lineguide.lua +++ b/plugins/lineguide.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local config = require "core.config" local style = require "core.style" local DocView = require "core.docview" @@ -7,7 +8,9 @@ local draw = DocView.draw function DocView:draw(...) draw(self, ...) - local offset = self:get_font():get_width("n") * config.line_limit + local ns = ("n"):rep(config.line_limit) + local ss = self:get_font():subpixel_scale() + local offset = self:get_font():get_width_subpixel(ns) / ss local x = self:get_line_screen_position(1) + offset local y = self.position.y local w = math.ceil(SCALE * 1) diff --git a/plugins/macmodkeys.lua b/plugins/macmodkeys.lua index 69028ab..14f8995 100644 --- a/plugins/macmodkeys.lua +++ b/plugins/macmodkeys.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local keymap = require "core.keymap" local on_key_pressed = keymap.on_key_pressed diff --git a/plugins/markers.lua b/plugins/markers.lua index 6e397d7..f4a70d6 100644 --- a/plugins/markers.lua +++ b/plugins/markers.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16
-- Markers plugin for lite text editor
-- original implementation by Petri Häkkinen
diff --git a/plugins/memoryusage.lua b/plugins/memoryusage.lua new file mode 100644 index 0000000..ee472dd --- /dev/null +++ b/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/plugins/motiontrail.lua b/plugins/motiontrail.lua index e688e1b..6f448bb 100644 --- a/plugins/motiontrail.lua +++ b/plugins/motiontrail.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local config = require "core.config" local style = require "core.style" diff --git a/plugins/openfilelocation.lua b/plugins/openfilelocation.lua index 58c3d6f..48877bd 100644 --- a/plugins/openfilelocation.lua +++ b/plugins/openfilelocation.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local config = require "core.config" diff --git a/plugins/openselected.lua b/plugins/openselected.lua index 65fdeb8..ccaa8e3 100644 --- a/plugins/openselected.lua +++ b/plugins/openselected.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local keymap = require "core.keymap" diff --git a/plugins/projectmanager.lua b/plugins/projectmanager.lua deleted file mode 100644 index b5a66e3..0000000 --- a/plugins/projectmanager.lua +++ /dev/null @@ -1,128 +0,0 @@ -local project_manager = {} - -local core = require "core" -local command = require "core.command" -local common = require "core.common" -local keymap = require "core.keymap" - -local projects_file = ".lite_projects.lua" - -project_manager.projects = {} - -local function load_projects() - local ok, t = pcall(dofile, EXEDIR .. "/" .. projects_file) - if ok then project_manager.projects = t end -end - -load_projects() - -local function serialize(val) - if type(val) == "string" then - return string.format("%q", val) - elseif type(val) == "table" then - local t = {} - for k, v in pairs(val) do - table.insert(t, "[" .. serialize(k) .. "]=" .. serialize(v)) - end - return "{" .. table.concat(t, ",") .. "}" - end - return tostring(val) -end - -local function save_projects() - local fp = io.open(EXEDIR .. "/" .. projects_file, "w") - if fp then - fp:write("return ", serialize(project_manager.projects), "\n") - fp:close() - end -end - -local function path_base_name(str) - local pattern = "[\\/]?([^\\/]+)[\\/]?$" - return str:match(pattern) -end - -function project_manager.add_project() - local proj_dir = system.absolute_path(".") - local proj_name = path_base_name(proj_dir) - core.command_view:set_text(proj_name) - core.command_view:enter("Project Name", - function(text) - if text then - project_manager.projects[text] = proj_dir - save_projects() - end - end) -end - -local function get_project_names() - local t = {} - for k, v in pairs(project_manager.projects) do table.insert(t, k) end - return t -end - -local function project_lister(func) - local projects = get_project_names(); - core.command_view:enter("Open Project", func, function(text) - local res = common.fuzzy_match(projects, text) - for i, name in ipairs(res) do - res[i] = { - text = name, - info = project_manager.projects[name], - } - end - return res - end) -end - -function project_manager.rename_project(func) - project_lister(function(text, item) - if item then - core.command_view:set_text(item.text) - core.command_view:enter("Rename ".. item.text, - function(_text) - if _text then - project_manager.projects[_text] = project_manager.projects[item.text] - project_manager.projects[item.text] = nil - save_projects() - end - end) - end - end) -end - -function project_manager.open_project() - project_lister(function(text, item) - if item then - system.exec(string.format("%q %q", EXEFILE, item.info)) - end - end) -end - -function project_manager.switch_project() - project_lister(function(text, item) - if item then - system.exec(string.format("%q %q", EXEFILE, item.info)) - os.exit() - end - end) -end - -function project_manager.remove_project() - project_lister(function(text, item) - if item then - project_manager.projects[item.text] = nil - save_projects() - end - end) -end - -command.add(nil, { - ["project-manager:open-project"] = project_manager.open_project, - ["project-manager:switch-project"] = project_manager.switch_project, - ["project-manager:add-project"] = project_manager.add_project, - ["project-manager:remove-project"] = project_manager.remove_project, - ["project-manager:rename-project"] = project_manager.rename_project, - }) - -return project_manager diff --git a/plugins/rainbowparen.lua b/plugins/rainbowparen.lua index b2689f0..b6075ac 100644 --- a/plugins/rainbowparen.lua +++ b/plugins/rainbowparen.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local tokenizer = require "core.tokenizer" local style = require "core.style" local common = require "core.common" diff --git a/plugins/restoretabs.lua b/plugins/restoretabs.lua new file mode 100644 index 0000000..6776e2c --- /dev/null +++ b/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/plugins/scale.lua b/plugins/scale.lua index 5dfa699..78dc9e2 100644 --- a/plugins/scale.lua +++ b/plugins/scale.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local common = require "core.common" local command = require "core.command" @@ -10,13 +11,15 @@ local CommandView = require "core.commandview" config.scale_mode = "code" config.scale_use_mousewheel = true +local scale_level = 0 +local scale_steps = 0.1 local font_cache = setmetatable({}, { __mode = "k" }) -- the following should be kept in sync with core.style's default font settings -font_cache[style.font] = { EXEDIR .. "/data/fonts/font.ttf", 14 * SCALE } -font_cache[style.big_font] = { EXEDIR .. "/data/fonts/font.ttf", 34 * SCALE } -font_cache[style.icon_font] = { EXEDIR .. "/data/fonts/icons.ttf", 14 * SCALE } -font_cache[style.code_font] = { EXEDIR .. "/data/fonts/monospace.ttf", 13.5 * SCALE } +font_cache[style.font] = { DATADIR .. "/fonts/font.ttf", 14 * SCALE } +font_cache[style.big_font] = { DATADIR .. "/fonts/font.ttf", 34 * SCALE } +font_cache[style.icon_font] = { DATADIR .. "/fonts/icons.ttf", 14 * SCALE } +font_cache[style.code_font] = { DATADIR .. "/fonts/monospace.ttf", 13.5 * SCALE } local load_font = renderer.font.load @@ -93,11 +96,26 @@ function RootView:on_mouse_wheel(d, ...) end end +local function res_scale() + scale_level = 0 + set_scale(default) +end + +local function inc_scale() + scale_level = scale_level + 1 + set_scale(default + scale_level * scale_steps) +end + +local function dec_scale() + scale_level = scale_level - 1 + set_scale(default + scale_level * scale_steps) +end + command.add(nil, { - ["scale:reset" ] = function() set_scale(default) end, - ["scale:decrease"] = function() set_scale(current_scale * 0.9) end, - ["scale:increase"] = function() set_scale(current_scale * 1.1) end, + ["scale:reset" ] = function() res_scale() end, + ["scale:decrease"] = function() dec_scale() end, + ["scale:increase"] = function() inc_scale() end, }) keymap.add { diff --git a/plugins/scalestatus.lua b/plugins/scalestatus.lua index 03216b5..2981523 100644 --- a/plugins/scalestatus.lua +++ b/plugins/scalestatus.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 --[[ scalestatus.lua displays current scale (zoom) in status view diff --git a/plugins/selectionhighlight.lua b/plugins/selectionhighlight.lua index 93dfe17..fd10239 100644 --- a/plugins/selectionhighlight.lua +++ b/plugins/selectionhighlight.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local style = require "core.style" local DocView = require "core.docview" diff --git a/plugins/sort.lua b/plugins/sort.lua index 2e865ab..34b2b93 100644 --- a/plugins/sort.lua +++ b/plugins/sort.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local translate = require "core.doc.translate" diff --git a/plugins/spellcheck.lua b/plugins/spellcheck.lua index 1f29792..975ef91 100644 --- a/plugins/spellcheck.lua +++ b/plugins/spellcheck.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local style = require "core.style" local config = require "core.config" diff --git a/plugins/tabnumbers.lua b/plugins/tabnumbers.lua index deabbcd..70da707 100644 --- a/plugins/tabnumbers.lua +++ b/plugins/tabnumbers.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local common = require "core.common" local core = require "core" local style = require "core.style" diff --git a/plugins/themeselect.lua b/plugins/themeselect.lua new file mode 100644 index 0000000..cafc1be --- /dev/null +++ b/plugins/themeselect.lua @@ -0,0 +1,48 @@ +-- mod-version:1 -- lite-xl 1.16 +local core = require "core" + +-- Load a specific theme when the filename of an active document does match +-- a pattern. + +-- usage: +-- require("plugins.themeselect").add_pattern("%.md$", "summer") + +local theme_select = { } + +local saved_colors_module = "core.style" + +local themes_patterns = { +} + +local reload_module = core.reload_module +local set_visited = core.set_visited + +function core.reload_module(name) + if name:match("^colors%.") then + saved_colors_module = name + end + reload_module(name) +end + +function core.set_visited(filename) + set_visited(filename) + for _, select in ipairs(themes_patterns) do + if filename:match(select.pattern) then + reload_module("colors." .. select.theme) + return + end + end + if saved_colors_module then + reload_module(saved_colors_module) + end +end + +function theme_select.add_pattern(pattern, theme) + table.insert(themes_patterns, {pattern = pattern, theme = theme}) +end + +function theme_select.clear_patterns() + themes_patterns = {} +end + +return theme_select diff --git a/plugins/titleize.lua b/plugins/titleize.lua index 2e4b52a..ac64f44 100644 --- a/plugins/titleize.lua +++ b/plugins/titleize.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" diff --git a/plugins/togglesnakecamel.lua b/plugins/togglesnakecamel.lua index 236c22e..0ba3ce9 100644 --- a/plugins/togglesnakecamel.lua +++ b/plugins/togglesnakecamel.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local core = require "core" local command = require "core.command" local keymap = require "core.keymap" diff --git a/plugins/unboundedscroll.lua b/plugins/unboundedscroll.lua index c4cc7bb..18d26a2 100644 --- a/plugins/unboundedscroll.lua +++ b/plugins/unboundedscroll.lua @@ -1,3 +1,4 @@ +-- mod-version:1 -- lite-xl 1.16 local DocView = require "core.docview" function DocView.clamp_scroll_position() diff --git a/plugins/workspace.lua b/plugins/workspace.lua deleted file mode 100644 index 028e0a2..0000000 --- a/plugins/workspace.lua +++ /dev/null @@ -1,164 +0,0 @@ -local core = require "core" -local DocView = require "core.docview" - -local workspace_filename = ".lite_workspace.lua" - - -local function serialize(val) - if type(val) == "string" then - return string.format("%q", val) - elseif type(val) == "table" then - local t = {} - for k, v in pairs(val) do - table.insert(t, "[" .. serialize(k) .. "]=" .. serialize(v)) - end - return "{" .. table.concat(t, ",") .. "}" - end - return tostring(val) -end - - -local function has_no_locked_children(node) - if node.locked then return false end - if node.type == "leaf" then return true end - return has_no_locked_children(node.a) and has_no_locked_children(node.b) -end - - -local function get_unlocked_root(node) - if node.type == "leaf" then - return not node.locked and node - end - if has_no_locked_children(node) then - return node - end - return get_unlocked_root(node.a) or get_unlocked_root(node.b) -end - - -local function save_view(view) - local mt = getmetatable(view) - if mt == DocView then - return { - type = "doc", - active = (core.active_view == view), - filename = view.doc.filename, - selection = { view.doc:get_selection() }, - scroll = { x = view.scroll.to.x, y = view.scroll.to.y }, - text = not view.doc.filename and view.doc:get_text(1, 1, math.huge, math.huge) - } - end - for name, mod in pairs(package.loaded) do - if mod == mt then - return { - type = "view", - active = (core.active_view == view), - module = name - } - end - end -end - - -local function load_view(t) - if t.type == "doc" then - local ok, doc = pcall(core.open_doc, t.filename) - if not ok then - return DocView(core.open_doc()) - end - local dv = DocView(doc) - if t.text then doc:insert(1, 1, t.text) end - doc:set_selection(table.unpack(t.selection)) - dv.last_line, dv.last_col = doc:get_selection() - dv.scroll.x, dv.scroll.to.x = t.scroll.x, t.scroll.x - dv.scroll.y, dv.scroll.to.y = t.scroll.y, t.scroll.y - return dv - end - return require(t.module)() -end - - -local function save_node(node) - local res = {} - res.type = node.type - if node.type == "leaf" then - res.views = {} - for _, view in ipairs(node.views) do - local t = save_view(view) - if t then - table.insert(res.views, t) - if node.active_view == view then - res.active_view = #res.views - end - end - end - else - res.divider = node.divider - res.a = save_node(node.a) - res.b = save_node(node.b) - end - return res -end - - -local function load_node(node, t) - if t.type == "leaf" then - local res - for _, v in ipairs(t.views) do - local view = load_view(v) - if v.active then res = view end - node:add_view(view) - end - if t.active_view then - node:set_active_view(node.views[t.active_view]) - end - return res - else - node:split(t.type == "hsplit" and "right" or "down") - node.divider = t.divider - local res1 = load_node(node.a, t.a) - local res2 = load_node(node.b, t.b) - return res1 or res2 - end -end - - -local function save_workspace() - local root = get_unlocked_root(core.root_view.root_node) - local fp = io.open(workspace_filename, "w") - if fp then - fp:write("return ", serialize(save_node(root)), "\n") - fp:close() - end -end - - -local function load_workspace() - local ok, t = pcall(dofile, workspace_filename) - os.remove(workspace_filename) - if ok then - local root = get_unlocked_root(core.root_view.root_node) - local active_view = load_node(root, t) - if active_view then - core.set_active_view(active_view) - end - end -end - - -local run = core.run - -function core.run(...) - if #core.docs == 0 then - core.try(load_workspace) - - local exit = os.exit - function os.exit(...) - save_workspace() - exit(...) - end - end - - core.run = run - return core.run(...) -end |