From cebb280fe546190e55e071b6adbf37cd47950f34 Mon Sep 17 00:00:00 2001 From: Collin Williams <96917990+bluedragon1221@users.noreply.github.com> Date: Mon, 11 May 2026 15:07:55 -0500 Subject: initial commit --- runtime/lua/core/ui.lua | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 runtime/lua/core/ui.lua (limited to 'runtime/lua/core/ui.lua') diff --git a/runtime/lua/core/ui.lua b/runtime/lua/core/ui.lua new file mode 100644 index 0000000..9ef25d1 --- /dev/null +++ b/runtime/lua/core/ui.lua @@ -0,0 +1,84 @@ +local M = {} + +local function hex_to_rgba(hex) + local h = hex:gsub("#", "") + if #h ~= 6 then + return 0, 0, 0, 255 + end + + local r = tonumber(h:sub(1, 2), 16) or 0 + local g = tonumber(h:sub(3, 4), 16) or 0 + local b = tonumber(h:sub(5, 6), 16) or 0 + return r, g, b, 255 +end + +local function current_buffer_label() + local path = editor.buffer_path() + if not path then + return "*scratch*" + end + return path +end + +function M.update_modeline(state) + if not state.mode_line_buffer then + return + end + + local dirty = editor.buffer_modified() and "*" or "-" + local cmd_mode = string.format("[%s-cmd]", state.command_kind or "lua") + local mode = state.command_mode and cmd_mode or string.format("[%s]", state.mode or "normal") + local leader = state.leader_pending and " [leader]" or "" + local text = string.format("lemacs %s | %s | %s %s%s", dirty, current_buffer_label(), state.current_theme, mode, leader) + editor.aux_buffer_set_text(state.mode_line_buffer, text) +end + +function M.set_message(state, text) + state.message_text = text + if state.message_buffer then + editor.aux_buffer_set_text(state.message_buffer, text) + end +end + +function M.update_commandline_buffer(state) + if not state.command_buffer then + return + end + local prefix = (state.command_kind == "command") and ":" or ":lua " + editor.aux_buffer_set_text(state.command_buffer, prefix .. state.command_text) +end + +function M.setup_layout(state, palette) + local width = editor.screen_width() + local height = editor.screen_height() + local mode_h = 28 + local msg_h = 24 + local cmd_h = state.command_mode and 24 or 0 + local body_h = height - mode_h - msg_h - cmd_h + if body_h < 1 then + body_h = 1 + end + + local base00_r, base00_g, base00_b = hex_to_rgba(palette.base00) + local base01_r, base01_g, base01_b = hex_to_rgba(palette.base01) + local base02_r, base02_g, base02_b = hex_to_rgba(palette.base02) + local base03_r, base03_g, base03_b = hex_to_rgba(palette.base03) + local base05_r, base05_g, base05_b = hex_to_rgba(palette.base05) + local base06_r, base06_g, base06_b = hex_to_rgba(palette.base06) + local base09_r, base09_g, base09_b = hex_to_rgba(palette.base09) + + editor.layout_reset() + editor.layout_add_view(0, 0, 0, 0, width, body_h, true, base00_r, base00_g, base00_b, 255, base05_r, base05_g, base05_b, 255) + editor.layout_add_view(1, state.mode_line_buffer, 0, body_h, width, mode_h, false, base02_r, base02_g, base02_b, 235, base06_r, base06_g, base06_b, 255) + editor.layout_add_view(1, state.message_buffer, 0, body_h + mode_h, width, msg_h, false, base01_r, base01_g, base01_b, 240, base09_r, base09_g, base09_b, 255) + + if state.command_mode then + editor.layout_add_view(1, state.command_buffer, 0, body_h + mode_h + msg_h, width, cmd_h, false, base03_r, base03_g, base03_b, 245, base06_r, base06_g, base06_b, 255) + end +end + +function M.current_buffer_label() + return current_buffer_label() +end + +return M -- cgit v1.3.1