aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md6
-rw-r--r--plugins/ephemeraldocviews.lua45
-rw-r--r--plugins/language_bib.lua22
-rw-r--r--plugins/language_po.lua20
-rw-r--r--plugins/language_tcl.lua68
-rw-r--r--plugins/lfautoinsert.lua60
-rw-r--r--plugins/navigate.lua60
-rw-r--r--plugins/pdfview.lua45
-rw-r--r--plugins/texcompile.lua44
9 files changed, 345 insertions, 25 deletions
diff --git a/README.md b/README.md
index 1255ace..4c166ad 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,7 @@ Plugin | Description
[`eofnewline`](https://github.com/bokunodev/lite_modules/blob/master/plugins/eofnewline-xl.lua?raw=1) | Make sure the file ends with one blank line.
[`eval`](plugins/eval.lua?raw=1) | Replaces selected Lua code with its evaluated result
[`exec`](plugins/exec.lua?raw=1) | Runs selected text through shell command and replaces with result
+[`ephemeraldocviews`](plugins/ephemeraldocviews.lua?raw=1) | Preview tabs. Opening a doc will replace the contents of the preview tab. Marks tabs as non-preview on any change.
[`fallbackfonts`](https://github.com/takase1121/lite-fallback-fonts)* | Adds support for fallback fonts *([gif](https://raw.githubusercontent.com/takase1121/lite-fallback-fonts/master/assets/Iw18fI57J0.gif))*
[`formatter`](https://github.com/vincens2005/lite-formatters)* | formatters for various languages
[`ghmarkdown`](plugins/ghmarkdown.lua?raw=1) | Opens a preview of the current markdown file in a browser window *([screenshot](https://user-images.githubusercontent.com/3920290/82754898-f7394600-9dc7-11ea-8278-2305363ed372.png))*
@@ -44,6 +45,7 @@ Plugin | Description
*[`indentguide`](plugins/indentguide.lua?raw=1)* | Adds indent guides *([screenshot](https://user-images.githubusercontent.com/3920290/79640716-f9860000-818a-11ea-9c3b-26d10dd0e0c0.png))*
[`language_angelscript`](plugins/language_angelscript.lua?raw=1) | Syntax for the [Angelscript](https://www.angelcode.com/angelscript/) programming language
[`language_batch`](plugins/language_batch.lua?raw=1) | Syntax for Windows [Batch Files](https://en.wikipedia.org/wiki/Batch_file)
+[`language_bib`](plugins/language_bib.lua?raw=1) | Syntax for [BibTex](https://en.wikipedia.org/wiki/BibTeX) files
[`language_cmake`](plugins/language_cmake.lua?raw=1) | Syntax for the CMake build system language
[`language_cpp`](plugins/language_cpp.lua?raw=1) | Syntax for the [C++](https://isocpp.org/) programming language
[`language_csharp`](plugins/language_csharp.lua?raw=1) | Syntax for the [C#](http://csharp.net) programming language
@@ -72,12 +74,14 @@ Plugin | Description
[`language_perl`](plugins/language_perl.lua?raw=1) | Syntax for the [Perl](https://perl.org) programming language
[`language_php`](plugins/language_php.lua?raw=1) | Syntax for the [PHP](https://php.net) programming language
[`language_pico8`](plugins/language_pico8.lua?raw=1) | Syntax for [Pico-8](https://www.lexaloffle.com/pico-8.php) cartridge files
+[`language_po`](plugins/language_po.lua?raw=1) | Syntax for [PO](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html) translation files
[`language_powershell`](plugins/language_powershell.lua?raw=1) | Syntax for [PowerShell](https://docs.microsoft.com/en-us/powershell) scripting language
[`language_psql`](plugins/language_psql.lua?raw=1) | Syntax for the postgresql database access language
[`language_rust`](plugins/language_rust.lua?raw=1) | Syntax for the [Rust](https://rust-lang.org/) programming language
[`language_ruby`](plugins/language_ruby.lua?raw=1) | Syntax for the [Ruby](https://www.ruby-lang.org/) programming language
[`language sass`](plugins/language_sass.lua?raw=1) | Syntax for the [Sass](https://sass-lang.com/) CSS preprocessor
[`language_sh`](plugins/language_sh.lua?raw=1) | Syntax for shell scripting language
+[`language_tcl`](plugins/language_tcl.lua?raw=1) | Syntax for the [Tcl](https://www.tcl.tk/) programming language
[`language_teal`](plugins/language_teal.lua?raw=1) | Syntax for the [Teal](https://github.com/teal-language/tl) programming language, a typed dialect of Lua.
[`language_tex`](plugins/language_tex.lua?raw=1) | Syntax for the [LaTeX](https://www.latex-project.org/) typesetting language
[`language_v`](plugins/language_v.lua?raw=1) | Syntax for the [V](https://vlang.io/) programming language
@@ -99,6 +103,7 @@ Plugin | Description
[`openfilelocation`](plugins/openfilelocation.lua?raw=1) | Opens the parent directory of the current file in the file manager
[`openselected`](plugins/openselected.lua?raw=1) | Opens the selected filename or url
~~[`projectmanager`](plugins/projectmanager.lua?raw=1)~~ | Integrated in lite-xl with improvements ~~Save projects and load/reload them quickly~~
+[`pdfview`](plugins/pdfview.lua?raw=1) | PDF preview for TeX files
[`rainbowparen`](plugins/rainbowparen.lua?raw=1) | Show nesting of parentheses with rainbow colours
[`restoretabs`](plugins/restoretabs.lua?raw=1) | Keep a list of recently closed tabs, and restore the tab in order on cntrl+shift+t.
[`regexreplaceplugin`](plugins/regexreplaceplugin.lua?raw=1) | Allows for you to write a regex and its replacement in one go, and live preview the results.
@@ -108,6 +113,7 @@ Plugin | Description
[`sort`](plugins/sort.lua?raw=1) | Sorts selected lines alphabetically
[`spellcheck`](plugins/spellcheck.lua?raw=1) | Underlines misspelt words *([screenshot](https://user-images.githubusercontent.com/3920290/79923973-9caa7400-842e-11ea-85d4-7a196a91ca50.png))* *— note: on Windows a [`words.txt`](https://github.com/dwyl/english-words/blob/master/words.txt) dictionary file must be placed beside the exe*
[`tabnumbers`](plugins/tabnumbers.lua?raw=1) | Displays tab numbers from 1–9 next to their names *([screenshot](https://user-images.githubusercontent.com/16415678/101285362-007a8500-37e5-11eb-869b-c10eb9d9d902.png))
+[`texcompile`](plugins/texcompile.lua?raw=1) | Compile Tex files into PDF
[`theme16`](https://github.com/monolifed/theme16)* | Theme manager with base16 themes
[`themescheduler`](https://github.com/BenStigsen/lite-config/blob/main/plugins/themescheduler.lua?raw=1) | Schedule themes to be used at certain times
[`themeselect`](plugins/themeselect.lua?raw=1) | Select a theme based on filename of active document
diff --git a/plugins/ephemeraldocviews.lua b/plugins/ephemeraldocviews.lua
new file mode 100644
index 0000000..37b3a3b
--- /dev/null
+++ b/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/plugins/language_bib.lua b/plugins/language_bib.lua
new file mode 100644
index 0000000..08a5662
--- /dev/null
+++ b/plugins/language_bib.lua
@@ -0,0 +1,22 @@
+-- mod-version:1 -- lite-xl 1.16
+local syntax = require "core.syntax"
+
+syntax.add {
+ files = { "%.bib$" },
+ comment = "%%",
+ patterns = {
+ { pattern = {"%%", "\n"}, type = "comment" },
+ { pattern = "@%a+", type = "keyword" },
+ { pattern = "%a+%s=", type = "keyword2" },
+ },
+ symbols = {
+ ["author"] = "keyword",
+ ["doi"] = "keyword",
+ ["issue"] = "keyword",
+ ["journal"] = "keyword",
+ ["month"] = "keyword",
+ ["numpages"] = "keyword",
+ ["pages"] = "keyword",
+ ["publisher"] = "keyword",
+ }
+}
diff --git a/plugins/language_po.lua b/plugins/language_po.lua
new file mode 100644
index 0000000..0f07d40
--- /dev/null
+++ b/plugins/language_po.lua
@@ -0,0 +1,20 @@
+-- mod-version:1 -- lite-xl 1.16
+local syntax = require "core.syntax"
+
+syntax.add {
+ files = { "%.po$", "%.pot$" },
+ comment = "#",
+ patterns = {
+ { pattern = { "#", "\n"}, type = "comment" },
+ { pattern = { '"', '"', '\\' }, type = "string" },
+ { pattern = "[%[%]]", type = "operator" },
+ { pattern = "%d+", type = "number" },
+ { pattern = "[%a_][%w_]*", type = "symbol" },
+ },
+ symbols = {
+ ["msgctxt"] = "keyword",
+ ["msgid"] = "keyword",
+ ["msgid_plural"] = "keyword",
+ ["msgstr"] = "keyword",
+ },
+}
diff --git a/plugins/language_tcl.lua b/plugins/language_tcl.lua
new file mode 100644
index 0000000..31efa84
--- /dev/null
+++ b/plugins/language_tcl.lua
@@ -0,0 +1,68 @@
+-- mod-version:1 -- lite-xl 1.16
+local syntax = require "core.syntax"
+
+syntax.add {
+ files = { "%.tcl$" },
+ comment = "#",
+ patterns = {
+ { pattern = "#.-\n", type = "comment" },
+ { pattern = { '"', '"', '\\' }, type = "string" },
+ { pattern = "0x%x+", type = "number" },
+ { pattern = "%d+[%d%.eE]*f?", type = "number" },
+ { pattern = "%.?%d+f?", type = "number" },
+ { pattern = "%$[%a_][%w_]*", type = "literal" },
+ { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" },
+ { pattern = "::[%a_][%w_]*", type = "function" },
+ { pattern = "[%a_][%w_]*%f[:]", type = "function" },
+ { pattern = "[%a_][%w_]*", type = "symbol" },
+ },
+ symbols = {
+ ["set"] = "keyword",
+ ["unset"] = "keyword",
+ ["rename"] = "keyword",
+ ["upvar"] = "keyword",
+ ["incr"] = "keyword",
+ ["source"] = "keyword",
+ ["expr"] = "keyword",
+ ["gets"] = "keyword",
+ ["puts"] = "keyword",
+ ["package"] = "keyword",
+ ["list"] = "keyword",
+ ["dict"] = "keyword",
+ ["split"] = "join",
+ ["concat"] = "join",
+ ["lappend"] = "keyword",
+ ["lset"] = "keyword",
+ ["lassign"] = "keyword",
+ ["lindex"] = "keyword",
+ ["llength"] = "keyword",
+ ["lsearch"] = "keyword",
+ ["lrange"] = "keyword",
+ ["linsert"] = "keyword",
+ ["lreplace"] = "keyword",
+ ["lrepeat"] = "keyword",
+ ["lsort"] = "keyword",
+ ["lreverse"] = "keyword",
+ ["array"] = "keyword",
+ ["concat"] = "keyword",
+ ["regexp"] = "keyword",
+ ["for"] = "keyword",
+ ["foreach"] = "keyword",
+ ["while"] = "keyword",
+ ["case"] = "keyword",
+ ["proc"] = "keyword",
+ ["if"] = "keyword",
+ ["else"] = "keyword",
+ ["elseif"] = "keyword",
+ ["break"] = "keyword",
+ ["continue"] = "keyword",
+ ["return"] = "keyword",
+ ["eval"] = "keyword",
+ ["try"] = "keyword2",
+ ["on"] = "keyword2",
+ ["finally"] = "keyword2",
+ ["throw"] = "keyword2",
+ ["error"] = "keyword2",
+ },
+}
+
diff --git a/plugins/lfautoinsert.lua b/plugins/lfautoinsert.lua
index 99f7e45..0534aa8 100644
--- a/plugins/lfautoinsert.lua
+++ b/plugins/lfautoinsert.lua
@@ -1,6 +1,7 @@
-- 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"
@@ -8,20 +9,52 @@ config.lfautoinsert_map = {
["{%s*\n"] = "}",
["%(%s*\n"] = ")",
["%f[[]%[%s*\n"] = "]",
- ["%[%[%s*\n"] = "]]",
["=%s*\n"] = false,
[":%s*\n"] = false,
- ["^#if.*\n"] = "#endif",
- ["^#else.*\n"] = "#endif",
- ["%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"] = false,
["^%s*<([^/][^%s>]*)[^>]*>%s*\n"] = "</$TEXT>",
["/%*%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 ""
@@ -37,7 +70,7 @@ command.add("core.docview", {
local line, col = doc:get_selection()
local text = doc.lines[line - 1]
- for ptn, close in pairs(config.lfautoinsert_map) do
+ for ptn, close in pairs(get_autoinsert_map(doc.filename)) do
local s, _, str = text:find(ptn)
if s then
if close
@@ -64,3 +97,12 @@ command.add("core.docview", {
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/plugins/navigate.lua b/plugins/navigate.lua
index 2bf4396..dd985b5 100644
--- a/plugins/navigate.lua
+++ b/plugins/navigate.lua
@@ -3,8 +3,8 @@
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 Doc = require "core.doc"
local DocView = require "core.docview"
local navigate = {
@@ -23,15 +23,37 @@ local function get_active_view()
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 list_len = #navigate.list
- for index=navigate.index+1, list_len, 1 do
- if navigate.list[index] then
- table.remove(navigate.list, index)
+ 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
- end
+ return true
+ end)
end
local line, col = doc:get_selection()
@@ -106,17 +128,23 @@ core.add_thread(function()
end
end)
-core.add_close_hook(function(doc)
- local filename = doc.filename
- local list = {table.unpack(navigate.list)}
- for index, position in ipairs(list) do
- if position.filename == filename then
- if navigate.list[index] then
- table.remove(navigate.list, index)
- 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
- end
-end)
+ return true
+ end)
+
+ doc_on_close(self)
+end
--
-- Commands
diff --git a/plugins/pdfview.lua b/plugins/pdfview.lua
new file mode 100644
index 0000000..743c6ec
--- /dev/null
+++ b/plugins/pdfview.lua
@@ -0,0 +1,45 @@
+-- mod-version:1 -- lite-xl 1.16
+local core = require "core"
+local command = require "core.command"
+local keymap = require "core.keymap"
+
+command.add("core.docview", {
+ ["pdfview:show-preview"] = function()
+ local av = core.active_view
+
+-- User's home directory
+ local homedir = ""
+
+ if PLATFORM == "Windows" then
+ homedir = os.getenv("USERPROFILE")
+ else
+ homedir = os.getenv("HOME")
+ end
+
+-- The current (La)TeX file
+ local texfile = av:get_filename()
+ texfile = string.gsub(texfile, '~', homedir)
+-- Construct the PDF file name out of the (La)Tex filename
+ local pdffile = "\"" .. string.gsub(texfile, ".tex", ".pdf") .. "\""
+-- PDF viewer - is there any provided by the environment
+ local pdfcmd = os.getenv("LITE_PDF_VIEWER")
+
+ core.log("Opening pdf preview for \"%s\"", texfile)
+
+ if pdfcmd ~= nil then
+ system.exec(pdfcmd .. " " .. pdffile)
+ elseif PLATFORM == "Windows" then
+ system.exec("start " .. pdffile)
+ else
+ system.exec(string.format("xdg-open %q", pdffile))
+ end
+
+-- core.add_thread(function()
+-- coroutine.yield(5)
+-- os.remove(htmlfile)
+-- end)
+ end
+})
+
+
+keymap.add { ["ctrl+shift+v"] = "pdfview:show-preview" }
diff --git a/plugins/texcompile.lua b/plugins/texcompile.lua
new file mode 100644
index 0000000..7a5fd6e
--- /dev/null
+++ b/plugins/texcompile.lua
@@ -0,0 +1,44 @@
+-- mod-version:1 -- lite-xl 1.16
+local core = require "core"
+local command = require "core.command"
+local keymap = require "core.keymap"
+
+command.add("core.docview", {
+ ["texcompile:tex-compile"] = function()
+ local av = core.active_view
+
+-- User's home directory
+ local homedir = ""
+
+ if PLATFORM == "Windows" then
+ homedir = os.getenv("USERPROFILE")
+ else
+ homedir = os.getenv("HOME")
+ end
+
+-- The current (La)TeX file and path
+ local texname = av:get_name()
+ local texpath = av:get_filename()
+ texpath = string.gsub(texpath, '~', homedir)
+ texpath = string.gsub(texpath, texname, '')
+
+-- LaTeX compiler - is there any provided by the environment
+ local texcmd = os.getenv("LITE_LATEX_COMPILER")
+
+ if texcmd == nil then
+ core.log("No LaTeX compiler found")
+ else
+ core.log("LaTeX compiler is %s, compiling %s", texcmd, texname)
+
+ system.exec(string.format("cd %q && %q %q", texpath, texcmd, texname))
+ end
+
+-- core.add_thread(function()
+-- coroutine.yield(5)
+-- os.remove(htmlfile)
+-- end)
+ end
+})
+
+
+keymap.add { ["ctrl+shift+t"] = "texcompile:tex-compile" }