| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- -- 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
|