-- zen-mode for lumacs -- ============================================================================ -- Distraction-free writing mode. Enables visual-line-mode, increases font -- size, and provides a cleaner interface for focused writing. -- ============================================================================ local M = {} -- Configuration M.config = { font_size_increase = 4, -- How much to increase font size enable_visual_line = true, -- Enable word wrap in zen mode width = 80, -- Target text width (for future centering) } -- State M.active = false M.saved_state = {} -- ============================================================================ -- Core Functions -- ============================================================================ function M.enable() if M.active then return {success = true, message = "Zen mode already active"} end -- Save current state M.saved_state = { font_size = editor:font_size(), visual_line_mode = editor:visual_line_mode(), } -- Apply zen mode settings local new_font_size = M.saved_state.font_size + M.config.font_size_increase editor:set_font_size(new_font_size) if M.config.enable_visual_line then editor:set_visual_line_mode(true) end M.active = true return {success = true, message = "Zen mode enabled (font: " .. new_font_size .. ")"} end function M.disable() if not M.active then return {success = true, message = "Zen mode not active"} end -- Restore saved state if M.saved_state.font_size then editor:set_font_size(M.saved_state.font_size) end if M.saved_state.visual_line_mode ~= nil then editor:set_visual_line_mode(M.saved_state.visual_line_mode) end M.active = false M.saved_state = {} return {success = true, message = "Zen mode disabled"} end function M.toggle() if M.active then return M.disable() else return M.enable() end end function M.is_active() return M.active end -- ============================================================================ -- Setup -- ============================================================================ function M.setup(opts) opts = opts or {} -- Merge user config for k, v in pairs(opts) do M.config[k] = v end -- Register commands editor:register_command("zen-mode", "Toggle distraction-free writing mode", function(args) return M.toggle() end) editor:register_command("zen-mode-enable", "Enable zen mode", function(args) return M.enable() end) editor:register_command("zen-mode-disable", "Disable zen mode", function(args) return M.disable() end) print("[zen-mode] Package loaded") end -- Auto-setup M.setup() return M