diff --git a/data/core/command.lua b/data/core/command.lua index 2cf851da..07b30fb8 100644 --- a/data/core/command.lua +++ b/data/core/command.lua @@ -64,7 +64,7 @@ end function command.add_defaults() local reg = { "core", "root", "command", "doc", "findreplace", - "files", "drawwhitespace", "dialog" + "files", "drawwhitespace", "dialog", "log" } for _, name in ipairs(reg) do require("core.commands." .. name) diff --git a/data/core/commands/log.lua b/data/core/commands/log.lua new file mode 100644 index 00000000..940ffca4 --- /dev/null +++ b/data/core/commands/log.lua @@ -0,0 +1,26 @@ +local core = require "core" +local command = require "core.command" + +command.add("core.logview", { + ["log:expand-item"] = function() + if core.active_view.hovered_item then + core.active_view:expand_item(core.active_view.hovered_item) + end + end, + ["log:copy-entry"] = function() + if core.active_view.hovered_item then + system.set_clipboard(core.get_log(core.active_view.hovered_item)) + end + end +}) + +command.add(nil, { + ["log:open-as-doc"] = function() + local doc = core.open_doc("logs.txt") + core.root_view:open_doc(doc) + doc:insert(1, 1, core.get_log()) + end, + ["log:copy-to-clipboard"] = function() + system.set_clipboard(core.get_log()) + end +}) diff --git a/data/core/init.lua b/data/core/init.lua index aadccc66..14408393 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -1034,15 +1034,21 @@ function core.get_views_referencing_doc(doc) end -local function log(icon, icon_color, fmt, ...) +local function log(level, show, fmt, ...) local text = string.format(fmt, ...) - if icon then - core.status_view:show_message(icon, icon_color, text) + if show then + local s = style.log[level] + core.status_view:show_message(s.icon, s.color, text) end local info = debug.getinfo(2, "Sl") local at = string.format("%s:%d", info.short_src, info.currentline) - local item = { text = text, time = os.time(), at = at } + local item = { + level = level, + text = text, + time = os.time(), + at = at + } table.insert(core.log_items, item) if #core.log_items > config.max_log_items then table.remove(core.log_items, 1) @@ -1052,17 +1058,17 @@ end function core.log(...) - return log("i", style.text, ...) + return log("INFO", true, ...) end function core.log_quiet(...) - return log(nil, nil, ...) + return log("INFO", false, ...) end function core.error(...) - return log("!", style.accent, ...) + return log("ERROR", true, ...) end @@ -1075,7 +1081,7 @@ function core.get_log(i) return table.concat(r, "\n") end local item = type(i) == "number" and core.log_items[i] or i - local text = string.format("[%s] %s at %s", os.date(nil, item.time), item.text, item.at) + local text = string.format("%s [%s] %s at %s", os.date(nil, item.time), item.level, item.text, item.at) if item.info then text = string.format("%s\n%s\n", text, item.info) end diff --git a/data/core/keymap.lua b/data/core/keymap.lua index b076629b..440e518d 100644 --- a/data/core/keymap.lua +++ b/data/core/keymap.lua @@ -235,7 +235,8 @@ keymap.add_direct { ["pagedown"] = "doc:move-to-next-page", ["shift+1lclick"] = "doc:select-to-cursor", - ["ctrl+1lclick"] = "doc:split-cursor", + ["ctrl+1lclick"] = { "doc:split-cursor", "log:copy-entry" }, + ["lclick"] = "log:expand-item", ["1lclick"] = "doc:set-cursor", ["2lclick"] = "doc:set-cursor-word", ["3lclick"] = "doc:set-cursor-line", diff --git a/data/core/logview.lua b/data/core/logview.lua index 1ea0e43e..5be2aaca 100644 --- a/data/core/logview.lua +++ b/data/core/logview.lua @@ -36,6 +36,7 @@ local LogView = View:extend() LogView.context = "session" + function LogView:new() LogView.super.new(self) self.last_item = core.log_items[#core.log_items] @@ -91,14 +92,6 @@ function LogView:on_mouse_moved(px, py, ...) end -function LogView:on_mouse_pressed(button, mx, my, clicks) - if LogView.super.on_mouse_pressed(self, button, mx, my, clicks) then return end - if self.hovered_item then - self:expand_item(self.hovered_item) - end -end - - function LogView:update() local item = core.log_items[#core.log_items] if self.last_item ~= item then @@ -144,7 +137,13 @@ function LogView:draw() x = common.draw_text(style.font, style.dim, time, "left", x, y, w, lh) x = x + style.padding.x - x = common.draw_text(style.code_font, style.dim, is_expanded(item) and "-" or "+", "left", x, y, w, lh) + x = common.draw_text( + style.icon_font, + style.log[item.level].color, + style.log[item.level].icon, + "left", + x, y, w, lh + ) x = x + style.padding.x w = w - (x - self:get_content_offset()) diff --git a/data/core/style.lua b/data/core/style.lua index 3b0d9e35..86f88414 100644 --- a/data/core/style.lua +++ b/data/core/style.lua @@ -66,4 +66,9 @@ style.syntax["function"] = { common.color "#93DDFA" } style.syntax_fonts = {} -- style.syntax_fonts["comment"] = renderer.font.load(path_to_font, size_of_font, rendering_options) +style.log = { + INFO = { icon = "i", color = style.text }, + ERROR = { icon = "!", color = style.accent } +} + return style diff --git a/data/plugins/contextmenu.lua b/data/plugins/contextmenu.lua index 4b34dfd5..017846ae 100644 --- a/data/plugins/contextmenu.lua +++ b/data/plugins/contextmenu.lua @@ -42,24 +42,6 @@ keymap.add { ["menu"] = "context:show" } -local function copy_log() - local item = core.active_view.hovered_item - if item then - system.set_clipboard(core.get_log(item)) - end -end - -local function open_as_doc() - local doc = core.open_doc("logs.txt") - core.root_view:open_doc(doc) - doc:insert(1, 1, core.get_log()) -end - -menu:register("core.logview", { - { text = "Copy entry", command = copy_log }, - { text = "Open as file", command = open_as_doc } -}) - if require("plugins.scale") then menu:register("core.docview", { { text = "Cut", command = "doc:cut" },