aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--manifest.json10
-rw-r--r--plugins/welcome.lua108
-rw-r--r--t/run.lua2
3 files changed, 119 insertions, 1 deletions
diff --git a/manifest.json b/manifest.json
index 862b615..811f086 100644
--- a/manifest.json
+++ b/manifest.json
@@ -61,6 +61,16 @@
}
},
{
+ "id": "welcome",
+ "description": "A welcome screen for lite-xl, that on first start, invites a user to install the meta_addons package, or access the plugin manager.",
+ "type": "plugin",
+ "path": "plugins/welcome.lua",
+ "version": "0.1",
+ "dependencies": {
+ "plugin_manager": {}
+ }
+ },
+ {
"id": "json",
"version": "1.0",
"description": "JSON support plugin, provides encoding/decoding.",
diff --git a/plugins/welcome.lua b/plugins/welcome.lua
new file mode 100644
index 0000000..610471d
--- /dev/null
+++ b/plugins/welcome.lua
@@ -0,0 +1,108 @@
+-- mod-version:3 --lite-xl 2.1
+
+local core = require "core"
+local style = require "core.style"
+local command = require "core.command"
+local keymap = require "core.keymap"
+local View = require "core.view"
+local common = require "core.common"
+local EmptyView = require "core.emptyview"
+local Node = require "core.node"
+
+local welcomed = system.get_file_info(USERDIR .. PATHSEP .. "welcomed") ~= nil
+
+local hovered_button = nil
+local function draw_button(view, x, y, w, button)
+ local highlight = hovered_button == button
+ if highlight then core.request_cursor("hand") end
+ local button_height = style.font:get_height() + style.padding.y * 2
+ renderer.draw_rect(x + w, y, button_height, button_height, highlight and style.dim or style.background2)
+ renderer.draw_text(style.icon_font, "+", x + w + style.padding.x, y + style.padding.y + 2, style.accent)
+ common.draw_text(style.font, highlight and style.accent or style.text, button.label, "left", x + style.padding.x, y, w, button_height)
+ return x, y, w, button_height
+end
+
+local buttons = {
+ { label = "Install Addons Package", command = "welcome:install-addons", tooltip = {
+ "Will install the basic addons package for lite-xl.",
+ "",
+ "Includes all syntax higlightings, various themes, as well as a few extra plugins to help lite-xl a bit more easy to interact with.",
+ "Recommened for newcomers to lite-xl. After install, your editor will silently restart, and you'll be fully ready to start with lite-xl."
+ } },
+ { label = "Open Plugin Manager", command = "welcome:open-plugin-manager", tooltip = { "Will open the plugin manager, and allow you to select which plugins you'd like to install before beginning with lite-xl." } },
+ { label = "Dismiss Welcome Options", command = "welcome:dismiss", tooltip = { "Dismisses this screen, never to be seen again." } }
+}
+
+local old_get_name = EmptyView.get_name
+function EmptyView:get_name() if welcomed then return old_get_name(self) end return "Welcome!" end
+
+local old_draw = EmptyView.draw
+function EmptyView:draw()
+ old_draw(self)
+ if welcomed then return end
+
+ local x, y, w, h = self.position.x + self.size.x / 2
+
+ local button_width = math.min(self.size.x / 2 - 80, 300)
+ x = self.position.x + self.size.x / 2 - 50
+ local button_height = style.padding.y * 2 + style.font:get_height()
+ local y = self.position.y + self.size.y / 2 - ((button_height + style.padding.y) * #buttons) / 2 - style.padding.y
+ renderer.draw_rect(x, y, button_width, #buttons * (button_height + style.padding.y), style.background)
+ for i,v in ipairs(buttons) do
+ v.x, v.y, v.w, v.h = draw_button(self, x + style.padding.x, y, button_width, v)
+ y = y + v.h + style.padding.y * 2
+ end
+
+ -- if hovered_button then
+ -- for i, v in ipairs(hovered_button.tooltip) do
+ -- common.draw_text(style.font, style.dim, v, "center", x, y, self.size.x / 2, style.font:get_height())
+ -- y = y + style.font:get_height()
+ -- end
+ -- else
+ -- common.draw_text(style.font, style.dim, "Hover over one of the options below to get started.", "center", x, y, self.size.x / 2, style.font:get_height())
+ -- end
+end
+
+function EmptyView:on_mouse_moved(x, y)
+ hovered_button = nil
+ for i,v in ipairs(buttons) do
+ if v.x and x >= v.x and x < v.x + v.w and y >= v.y and y < v.y + v.h then
+ hovered_button = v
+ end
+ end
+end
+
+function EmptyView:on_mouse_released(button, x, y)
+ if hovered_button and not welcomed then command.perform(hovered_button.command) end
+end
+
+
+
+local function terminate_welcome()
+ io.open(USERDIR .. PATHSEP .. "welcomed", "wb"):close()
+ welcomed = true
+end
+
+local PluginManager = require "plugins.plugin_manager"
+
+command.add(EmptyView, {
+ ["welcome:install-addons"] = function()
+ core.log("Installing addons...")
+ PluginManager:install({ id = "meta_addons" }, { progress = function() end, restart = false }):done(function()
+ core.log("Addons installed.")
+ terminate_welcome()
+ command.perform("core:restart")
+ end):fail(function(err)
+ core.error(err)
+ end)
+ end,
+ ["welcome:open-plugin-manager"] = function()
+ command.perform("plugin-manager:show")
+ terminate_welcome()
+ end,
+ ["welcome:dismiss"] = function()
+ terminate_welcome()
+ end
+})
+
+return { }
diff --git a/t/run.lua b/t/run.lua
index 0dc2deb..6b25d50 100644
--- a/t/run.lua
+++ b/t/run.lua
@@ -96,7 +96,7 @@ local tests = {
["07_manifest"] = function()
local results = json.decode(io.open("manifest.json", "rb"):read("*all"))
assert(#results["remotes"] == 2)
- assert(#results["addons"] == 2)
+ assert(#results["addons"] == 3)
end,
["08_install_many"] = function()
lpm("install encoding gitblame gitstatus language_ts lsp minimap")