aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco <francesco.bbt@gmail.com>2021-03-14 16:36:38 +0100
committerGitHub <noreply@github.com>2021-03-14 16:36:38 +0100
commit2685b05692e6fc40490c3118a992de1b18ee3856 (patch)
treeebd3162edc8eec704e2a1aa5a22127367b081c2d
parentbc02e34c2797c6436747a7eb975c449ddaec7cc8 (diff)
parentf239216c2f0dbc087d4c7701732399258ed2011a (diff)
downloadlite-xl-plugins-2685b05692e6fc40490c3118a992de1b18ee3856.tar.gz
lite-xl-plugins-2685b05692e6fc40490c3118a992de1b18ee3856.zip
Merge branch 'master' into lqdev-plugin-patches
-rw-r--r--README.md15
-rw-r--r--plugins/closeconfirmx.lua54
-rw-r--r--plugins/inanimate.lua12
-rw-r--r--plugins/language_csharp.lua10
-rw-r--r--plugins/projectmanager.lua128
-rw-r--r--plugins/scale.lua8
-rw-r--r--plugins/workspace.lua164
7 files changed, 76 insertions, 315 deletions
diff --git a/README.md b/README.md
index 609cdc1..0099aa7 100644
--- a/README.md
+++ b/README.md
@@ -18,11 +18,12 @@ Plugin | Description
[`black`](https://git.sr.ht/~tmpod/black-lite)* | Integrates the [black](https://github.com/psf/black) Python formatter with lite
[`bracketmatch`](plugins/bracketmatch.lua?raw=1) | Underlines matching pair for bracket under the caret *([screenshot](https://user-images.githubusercontent.com/3920290/80132745-0c863f00-8594-11ea-8875-c455c6fd7eae.png))*
[`centerdoc`](plugins/centerdoc.lua?raw=1) | Centers document's content on the screen *([screenshot](https://user-images.githubusercontent.com/3920290/82127896-bf6e4500-97ae-11ea-97fc-ba9a552bc9a4.png))*
+[`closeconfirmx`](plugins/closeconfirmx.lua?raw=1) | Replaces a system close confirmation dialog with a command view, like for individual files *([screenshot](https://user-images.githubusercontent.com/1689801/107596774-afa76280-6c53-11eb-80ab-22e73058c097.png))*
[`colorpreview`](plugins/colorpreview.lua?raw=1) | Underlays color values (eg. `#ff00ff` or `rgb(255, 0, 255)`) with their resultant color. *([screenshot](https://user-images.githubusercontent.com/3920290/80743752-731bd780-8b15-11ea-97d3-847db927c5dc.png))*
-[`console`](https://github.com/rxi/console)* | A console for running external commands and capturing their output *([gif](https://user-images.githubusercontent.com/3920290/81343656-49325a00-90ad-11ea-8647-ff39d8f1d730.gif))*
+[`console (adapted for lite-xl)`](https://github.com/franko/console)* | A console for running external commands and capturing their output *([gif](https://user-images.githubusercontent.com/3920290/81343656-49325a00-90ad-11ea-8647-ff39d8f1d730.gif))*
[`copyfilelocation`](plugins/copyfilelocation.lua?raw=1) | Copy file location to clipboard
[`datetimestamps`](plugins/datetimestamps.lua?raw=1) | Insert date-, time- and date-time-stamps
-[`detectindent`](plugins/detectindent.lua?raw=1) | Automatically detects and uses the indentation size and tab type of a loaded file
+~~[`detectindent`](plugins/detectindent.lua?raw=1)~~ | Included with lite-xl ~~Automatically detects and uses the indentation size and tab type of a loaded file~~
[`dragdropselected`](plugins/dragdropselected.lua?raw=1) | Provides basic drag and drop of selected text (in same document)
[`drawwhitespace`](plugins/drawwhitespace.lua?raw=1) | Draws tabs and spaces *([screenshot](https://user-images.githubusercontent.com/3920290/80573013-22ae5800-89f7-11ea-9895-6362a1c0abc7.png))*
[`eofnewline`](https://github.com/bokunodev/lite_modules/blob/master/plugins/eofnewline.lua?raw=1) | Make sure the file ends with one blank line.
@@ -34,8 +35,8 @@ Plugin | Description
[`gofmt`](plugins/gofmt.lua?raw=1) | Auto-formats the current go file, adds the missing imports and the missing return cases
[`hidelinenumbers`](plugins/hidelinenumbers.lua?raw=1) | Hides the line numbers on the left of documents *([screenshot](https://user-images.githubusercontent.com/3920290/81692043-b8b19c00-9455-11ea-8d74-ad99be4b9c5f.png))*
[`hidestatus`](plugins/hidestatus.lua?raw=1) | Hides the status bar at the bottom of the window
-[`inanimate`](plugins/inanimate.lua?raw=1) | Disables all transition animations
-[`indentguide`](plugins/indentguide.lua?raw=1) | Adds indent guides *([screenshot](https://user-images.githubusercontent.com/3920290/79640716-f9860000-818a-11ea-9c3b-26d10dd0e0c0.png))*
+~~[`inanimate`](plugins/inanimate.lua?raw=1)~~ | Integrated in lite-xl using `config.transitions = false` ~~Disables all transition animations~~
+[`indentguide`](plugins/indentguide.lua?raw=1) | **Currently broken for lite-xl** 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_cmake`](plugins/language_cmake.lua?raw=1) | Syntax for the CMake build system language
@@ -77,9 +78,10 @@ Plugin | Description
[`macmodkeys`](plugins/macmodkeys.lua?raw=1) | Remaps mac modkeys `command/option` to `ctrl/alt`
[`markers`](plugins/markers.lua?raw=1) | Add markers to docs and jump between them quickly *([screenshot](https://user-images.githubusercontent.com/3920290/82252149-5faaa200-9946-11ea-9199-bea2efb7ee23.png))*
[`motiontrail`](plugins/motiontrail.lua?raw=1) | Adds a motion-trail to the caret *([screenshot](https://user-images.githubusercontent.com/3920290/83256814-085ccb00-a1ab-11ea-9e35-e6633cbed1a9.gif))*
+[`nagbar`](https://github.com/takase1121/lite-nagbar)* | consistent and _beautiful_ confirmation dialogs for lite and lite-xl *([gif](https://raw.githubusercontent.com/takase1121/lite-nagbar/master/assets/preview.gif))*
[`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) | Save projects and load/reload them quickly
+~~[`projectmanager`](plugins/projectmanager.lua?raw=1)~~ | Integrated in lite-xl with improvements ~~Save projects and load/reload them quickly~~
[`rainbowparen`](plugins/rainbowparen.lua?raw=1) | Show nesting of parentheses with rainbow colours
[`scale`](plugins/scale.lua?raw=1) | Provides support for dynamically adjusting the scale of the code font / UI (`ctrl+-`, `ctrl+=`)
[`scalestatus`](plugins/scalestatus.lua?raw=1) | Displays current scale (zoom) in status view (depends on scale plugin)
@@ -88,8 +90,9 @@ Plugin | Description
[`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))
[`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
[`titleize`](plugins/titleize.lua?raw=1) | Titleizes selected string (`hello world` => `Hello World`)
[`todotreeview`](https://github.com/drmargarido/TodoTreeView)* | Todo tree viewer for annotations in code like `TODO`, `BUG`, `FIX`, `IMPROVEMENT`
[`togglesnakecamel`](plugins/togglesnakecamel.lua?raw=1) | Toggles symbols between `snake_case` and `camelCase`
[`unboundedscroll`](plugins/unboundedscroll.lua?raw=1) | Allows scrolling outside the bounds of a document
-[`workspace`](plugins/workspace.lua?raw=1) | Retains project's layout and open documents between sessions
+~~[`workspace`](plugins/workspace.lua?raw=1)~~ | Integrated in lite-xl ~~Retains project's layout and open documents between sessions~~
diff --git a/plugins/closeconfirmx.lua b/plugins/closeconfirmx.lua
new file mode 100644
index 0000000..805fe3b
--- /dev/null
+++ b/plugins/closeconfirmx.lua
@@ -0,0 +1,54 @@
+-- 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/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/language_csharp.lua b/plugins/language_csharp.lua
index 5e790e3..c40009c 100644
--- a/plugins/language_csharp.lua
+++ b/plugins/language_csharp.lua
@@ -21,9 +21,10 @@ syntax.add {
{ pattern = "[%a_][%w_]*", type = "symbol" },
},
symbols = {
- -- keywords
+ -- keywords and contextual keywords
["abstract"] = "keyword",
["as"] = "keyword",
+ ["add"] = "keyword",
["await"] = "keyword",
["base"] = "keyword",
["break"] = "keyword",
@@ -31,6 +32,7 @@ syntax.add {
["catch"] = "keyword",
["checked"] = "keyword",
["class"] = "keyword",
+ ["record"] = "keyword",
["const"] = "keyword",
["continue"] = "keyword",
["default"] = "keyword",
@@ -59,9 +61,12 @@ syntax.add {
["operator"] = "keyword",
["out"] = "keyword",
["override"] = "keyword",
+ ["remove"] = "keyword",
["params"] = "keyword",
+ ["partial"] = "keyword",
["private"] = "keyword",
["protected"] = "keyword",
+ ["dynamic"] = "keyword",
["public"] = "keyword",
["readonly"] = "keyword",
["ref"] = "keyword",
@@ -81,10 +86,13 @@ syntax.add {
["unsafe"] = "keyword",
["using"] = "keyword",
["var"] = "keyword",
+ ["value"] = "keyword",
+ ["global"] = "keyword",
["virtual"] = "keyword",
["void"] = "keyword",
["volatile"] = "keyword",
["where"] = "keyword",
+ ["when"] = "keyword",
["while"] = "keyword",
["yield"] = "keyword",
-- types
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/scale.lua b/plugins/scale.lua
index 5dfa699..9d9ea73 100644
--- a/plugins/scale.lua
+++ b/plugins/scale.lua
@@ -13,10 +13,10 @@ config.scale_use_mousewheel = true
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
diff --git a/plugins/workspace.lua b/plugins/workspace.lua
deleted file mode 100644
index 822291b..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 original_on_quit = core.on_quit
- function core.on_quit()
- save_workspace()
- original_on_quit()
- end
- end
-
- core.run = run
- return core.run(...)
-end